开源web框架django知识总结(十二)
户中心界面 (一)
定义模型类基类
为了给项目中模型类补充数据创建时间和更新时间两个字段,我们需要定义模型类基类。 新建
aerf_mall.utils/BaseModel.py
文件,创建模型类基类。Django模型中
auto_now_add=True时为添加时的时间,更新对象时不会有变动。
auto_now=True无论是你添加还是修改对象,时间为你添加或者修改的时间。
from django.db import models
class BaseModel(models.Model):
"""为模型类补充字段"""
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
class Meta:
abstract = True # 说明是抽象模型类, 用于继承使用,数据库迁移时不会创建BaseModel的表
1、判断用户是否登录
需求:
- 当用户登录后,才能访问用户中心。
- 如果用户未登录,就不允许访问用户中心,将用户引导到登录界面。
实现方案:
- 需要判断用户是否登录。
- 根据是否登录的结果,决定用户是否可以访问用户中心。
2. is_authenticated
判断用户是否登录
介绍:
- Django用户认证系统提供了方法
request.user.is_authenticated()
来判断用户是否登录。- 如果通过登录验证则返回True。反之,返回False。
- 缺点:登录验证逻辑很多地方都需要,所以该代码需要重复编码好多次。
3. login_required装饰器
判断用户是否登录
3.1.定义View子类封装login_required装饰器
- 提示:
LoginRequired(object)
依赖于视图类View
,复用性很差。
3.2、定义验证用户是否登录扩展
在项目根木下utils包下,新建views.py
注意一下,这里为什么不在user.utils.py中写?
from django.http import JsonResponse
# 定义一个装饰器,验证是否已经登陆
def login_required(func):
# func:是视图函数
def wrapper(request, *args, **kwargs):
# 添加功能代码
if request.user.is_authenticated:
return func(request, *args, **kwargs)
else:
return JsonResponse({
'code': 400, 'errmsg': '您未登陆!'}, status=401)
return wrapper
4、用户中心页接口
from aerf_mall.utils.views import login_required # 注意修改导包路径
from django.utils.decorators import method_decorator #主要的作用就是解决装饰器不能直接的装饰类视图函数
class UserInfoView(View):
@method_decorator(login_required)
def get(self, request):
# 1、获取用户对象
user = request.user
# 2、构造响应数据返回
return JsonResponse({
'code': 0,
'errmsg': 'ok',
'info_data': {
'username': user.username,
'mobile': user.mobile,
# 'email': user.email, # email模型没写,暂时先注释
# 'email_active': user.email_active # email模型没写,暂时先注释
}
})
urls.py
# 用户中心的子路由
re_path(r'^info/$', UserInfoView.as_view()),
用户中心
1. 用户基本信息逻辑分析
以下是要实现的后端逻辑
- 用户模型补充
email_active
字段 - 查询并展示用户基本信息
- 添加邮箱
- 发送邮箱验证邮件
- 验证邮箱
- 安装包:pip install itsdangerous
2.用户模型补充email_active字段 users.models.py
from django.db i