(根据居然老师直播课内容整理)
一、用户名登录
1、用户名登录逻辑分析
- 用户输入地址后,获取登录页面
- 输入必要信息用后,点击登录,向后端发送登录请求
- 后端接收请求,提取参数,然后校验参数,如果有误,向前端返回错误信息
- 认证参数:验证用户名和密码是数据库信息比较
- 如果正确,保持状态
- 向前端返回登录结果
2、用户名登录接口设计
2.1 请求方式
选项 |
方案 |
请求方法 |
POST |
请求地址 |
/login/ |
2.2 请求参数:表单
参数名 |
类型 |
是否必传 |
说明 |
username |
string |
是 |
用户名 |
password |
string |
是 |
密码 |
remembered |
string |
否 |
是否记住用户 |
2.3 响应结果:HTML
字段 |
说明 |
登录失败 |
响应错误提示 |
登录成功 |
重定向到首页 |
3、用户名登录接口定义
3.1 用户注册接口定义
class LoginView(View):
"""用户名登录"""
def get(self, request):
"""
提供登录界面
:param request: 请求对象
:return: 登录界面
"""
return render(request, 'login.html')
def post(self, request):
"""
实现登录逻辑
:param request: 请求对象
:return: 登录结果
"""
pass
3.2 定义校验处理类
- 在./apps/users下定义forms.py,对需要校验的数据进行校验处理
- 对数据进行简单校验:变量名(传递的参数名)=form.CharField(简单校验类型=标准值,错误信息字典)
- 用户名、密码、是否记住登录进行校验
- 无需其它校验,所以不用clean()方法
class LoginForm(forms.Form):
username = forms.CharField(max_length=20, min_length=5, required=True, error_messages={
"max_length": "用户名长度最长为20", "min_length": "用户名最少长度为5"})
password = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
"max_length": "密码长度最长为20", "min_length": "密码最少长度为8"})
remembered = forms.BooleanField(required=False)
3.3 用户登录接口开发
- 接收并校验参数:实例化校验处理类
- 判断校验结果
- 如果校验无误:
- 取出 用户名、密码、是否记住登录
- 判断 必传参数是否传入all([参数1,参数2,…]),如果为否,返回缺少参数错误
- 认证登录用户:
- 一般作法:
- 根据users模型从SQL数据库取出登录用户名的相关信息
- 进行密码时加密并校验密码
- 根据结果、判断、或出错,进行错误返回
- Django提供了django.contrib.auth.authenticate()方法,
- 根据登录用户名、密码,返回一个users对象,如果用户名或密码错误,返回None
- 如果None,返回错误信息
- 保持状态:利用django提供的方法: login(request, user)
- 根据 是否记住登录 的值 设置 session 保存时间:request.session.set_expiry()
- 返回到首页
class LoginView(View):
"""用户名登录"""
def get(self, request<