管理后台的制作


建立管理后台的应用
管理后台模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from django.db import models

class UserModel(models.Model):

username = models.CharField(max_length=32, unique=True) # 名称

password = models.CharField(max_length=256) # 密码

email = models.CharField(max_length=64, unique=True) # 邮箱

# False 代表女

sex = models.BooleanField(default=False) # 性别

icon = models.ImageField(upload_to='icons') # 头像

is_delete = models.BooleanField(default=False) # 是否删除

class Meta:
db_table = 'axf_users'
class UserTicketModel(models.Model):

user = models.ForeignKey(UserModel) # 关联用户

ticket = models.CharField(max_length=256) # 密码

out_time = models.DateTimeField() # 过期时间
class Meta:
db_table = 'axf_users_ticket'
url映射
1
2
3
4
5
6
7
8
9
10
11
12
13
from django.conf.urls import url

from user import views

urlpatterns = [

# 登录
url(r'^login/', views.login, name='login'),
# 注册
url(r'^register/', views.register, name='register'),
# 注销
url(r'^logout/', views.logout, name='logout'),
]
控制器(views)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from datetime import datetime, timedelta

from django.contrib.auth.hashers import make_password, check_password

from django.http import HttpResponseRedirect

from django.shortcuts import render

from django.core.urlresolvers import reverse

from user.models import UserModel, UserTicketModel

from utils.functions import get_ticket


def register(request):
"""
注册
"""
if request.method == 'GET':

return render(request, 'user/user_register.html')

if request.method == 'POST':

username = request.POST.get('username')
email = request.POST.get('email')
password = request.POST.get('password')
icon = request.FILES.get('icon')
# 需要验证参数都不为空
if not all([username, email, password, icon]):
# 验证不通过,提示参数不能为空,返回页面错误提示
msg = '参数不能为空'
return render(request, 'user/user_register.html', {'msg': msg})
# 加密password
password = make_password(password)
# 创建
UserModel.objects.create(username=username,
password=password,
email=email,
icon=icon
)
return HttpResponseRedirect(reverse('user:login'))


def login(request):
"""
登录
"""
if request.method == 'GET':
return render(request, 'user/user_login.html')

if request.method == 'POST':

username = request.POST.get('username')
password = request.POST.get('password')
# 验证用户是否存在
user = UserModel.objects.filter(username=username).first()
if user:
# 验证密码是否正确
if check_password(password, user.password):
# 1. 保存ticket在客户端
ticket = get_ticket()
response = HttpResponseRedirect(reverse('axf:mine'))
out_time = datetime.now() + timedelta(days=1)
response.set_cookie('ticket', ticket, expires=out_time)
# 2. 保存ticket到服务端的user_ticket表中
UserTicketModel.objects.create(user=user,
out_time=out_time,
ticket=ticket)
return response
else:
msg = '密码错误'
return render(request, 'user/user_login.html', {'msg': msg})
else:
msg = '用户不存在'
return render(request, 'user/user_login.html', {'msg': msg})


def logout(request):
"""
注销
"""
if request.method == 'GET':
# 注销,删除当前登录的用户的cookies中的ticket信息
response = HttpResponseRedirect(reverse('user:login'))
response.delete_cookie('ticket')

return response