Django 项目6:表单与认证系统
目录
1、form 表单
2、session 保存状态
3、Admin 后台
4、Auth 系统
1、form 表单
(1)创建 form.py 文件,并完善
from django import forms# 定义一个表单类
class Register(forms.Form):user = forms.CharField(max_length=30, label='用户名')pw = forms.CharField(label='密码', min_length=6, max_length=8,widget=forms.PasswordInput(attrs={'placeholder': '请输入你的密码:'}),error_messages={'min_length': '密码小于6位', 'max_length': '密码大于8位'})repw = forms.CharField(label='请再次输入密码', widget=forms.PasswordInput())phone = forms.RegexField(regex='^1\d{10}$', label='手机号',error_messages={'invalid': '收入的手机号格式不对'})email = forms.EmailField(label='电子邮箱')
2、session 保存状态
(1)状态保存
- http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
- 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
- 存储方式包括cookie、session,会话一般指session对象
- 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
- 使用session方式,所有数据存储在服务器端,在客户端cookie中存储session_id
- 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
注意:不同的请求者之间不会共享这个数据,与请求者一一对应
(2)创建 session 状态
# user和pw是session的键,u和p是变量名
request.session['user'] = u
request.session['pw'] = p
(3)查找 session 状态
# 第一个是需要查找的键,第二个是没找到键时返回空的值
user = request.session.get('user', '')
user = request.session.get('pw', None)
# 获取键
keys = request.session.keys()
# 获取值
values = request.session.values()
# 获取session_key
session_key = request.session.session_key
(4)删除 session 状态
del user # 删除对应键值对的值
request.session.clear() # 删除数据,但是会记录保持
request.session.flush() # 直接清空
(5)setting 中设置会话(session)管理参数
# 是否关闭浏览器就关闭session
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# 是否每次请求都报错session
SESSION_SAVE_EVERY_REQUEST = False
# 设置cookie及session的失效时间,默认位两周,单位为秒
SESSION_COOKIE_AGE = 1209600
3、Admin 后台
(1)注册 admin ,在 manage.py 中执行下面代码设置 Admin 后台的用户名和密码
createsuperuser
(2)在 App 的 admin.py 中注册模板
from django.contrib import admin# Register your models here.from demo1.models import User# 注册模版方法1
# admin.site.register(User)# 注册模版方法2
# @admin.register(User) # 启动方法1class Useradmin(admin.ModelAdmin):# 设置展示字段list_display = ['id', 'user', 'pw']# 使用 user 来跳转到修改界面list_display_links = ['user']admin.site.register(User, Useradmin) # 启动方式2
4、Auth 系统
(1)介绍
- User:User是auth模块中维护用户信息的关系模式(继承了models.Model),数据库中该表被命名为auth_user。
- Group:User对象中有一个名为groups的多对多字段,多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
- Permission:Django的auth系统提供了模型级的权限控制,即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。
(2)功能
- create_user 创建用户
- authenticate 验证登录
- login 记住用户的登录状态
- logout 退出登录
- is_authenticated 判断用户是否登录
- login_required 判断用户是否登录的装饰器
login_required的使用:
# 第一种跳转路由的方式
@login_required(login_url='需要跳转的路由')# 第二种跳转路由的方式(在steeing最后添加以下代码)
LOGIN_URL = '需要跳转的路由'
(3)例子(创建登录的视图函数)
def cl_login(request):if request.method == 'POST':u = request.POST.get('user')p = request.POST.get('pw')print(u, p)if User.objects.filter(username=u):print(User.objects.all())user = authenticate(username=u, password=p)# 用户是否存在if user:# 判断账号是否激活if user.is_active:# 将用户对象添加到当前会话(session)中login(request, user)# return HttpResponse('登录成功')return redirect(reverse('demo1:index'))else:return HttpResponse('用户未激活')else:return HttpResponse('用户密码或者用户名不正确')return render(request, 'demo1/demo3.html')