通过django开发一个简单后台管理系统,主要运用django、前端相关知识。本文主要记录一步一步实现过程
一、创建项目
创建project django-admin startproject user_manager 创建APP python manage.py startapp app01
二、设计表结构
主要有班级表、老师表、学生表、用户表。班级和学生是一对多的关系、班级和老师是多对多的关系。
from django.db import models # Create your models here. class Classes(models.Model): caption = models.CharField(max_length=32) class Student(models.Model): name = models.CharField(max_length=32) cls = models.ForeignKey(Classes,on_delete=models.CASCADE) class Teacher(models.Model): name = models.CharField(max_length=32) cls = models.ManyToManyField(Classes) class Administrator(models.Model): username = models.CharField(max_length=32) password = models.CharField(max_length=32)
生成同步数据库的脚本
python manage.py makemigrations
同步数据库
python manage.py migrate
三、相关功能实现
1、登录注册
用户访问登录url,返回登录页面,输入用户名/密码,验证通过,返回首页;验证失败,提示错误信息。用户未登录直接访问首页url,重定向到登录页面(其中会用到cookie和session相关知识)
url设计
from django.contrib import admin from django.urls import path from django.conf.urls import include, url from app01.views import * urlpatterns = [ path('admin/', admin.site.urls), url(r'^login/', login), #登录url url(r'^index/', index), #首页url ]
登录页面/首页页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="login.html" method="post"> {% csrf_token %} <div> <label for="user"> 用户名:</label> <input id="user" type="text" name="user"> </div> <div> <label for="pwd"> 密 码:</label> <input id="pwd" type="password" name="pwd"> </div> <div> <label></label> <input type="submit" value="登录"> <span style="color: red">{{ msg }}</span> </div> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>hell {{ user }}</p> </body> </html>
from django.shortcuts import render # Create your views here. from django.shortcuts import redirect from django.http import HttpResponse from django.views.decorators import csrf import json import requests import re import os from app01.models import * #from django.contrib.sessions.backends.db import SessionStore def login(request): message = '' print(request.COOKIES) """{'_ga': 'GA1.1.664909549.1531444385', 'csrftoken': 'cH0jMqG7OmrbRcSoOD6FdNTgGdVdFOvRl6x3gH74GnkTFLdxyNAifvoVDiGkinWi', 'sessionid': 'wd7pa91lltnnxe7qjet6uxe3tuyb32jz', 'username': 'root'}""" #v = request.session #request.session.clear() if request.method == "POST": print(request.POST) user = request.POST.get('user') pwd = request.POST.get('pwd') '''if user == 'root' and pwd == '123': rep = redirect('/index') # 将username写入浏览器cookie,失效时间为60s rep.set_cookie('username',user,60) return rep''' #从数据库中查询用户和密码是否正确 num=Administrator.objects.filter(username=user,password=pwd).count() if num: rep = redirect('/index') rep.set_cookie('username', user, 60) #request.session['is_login'] = True #request.session['username'] = user return rep else: message = '用户或密码错误' return render(request, 'login.html',{'msg':message}) def index(request): #如果用户已经登录获取用户,否则返回登录页面,禁止用户直接访问index页面 # 通过cookie判断用户是否已登录,提取浏览器中的cookie,如果不为空,表示已经登录 user = request.COOKIES.get('username') #user = request.session.get('username') if user: return render(request,'index.html',{'user':user}) else: return redirect('/login')