django项目学习三
用户模块开发
1. django认证系统
文档:https://docs.djangoproject.com/zh-hans/2.2/topics/auth/default/
项目需要用的方法有:
方法名 | 备注 |
---|---|
create_user | 创建用户 |
authenticate | 登录验证 |
login | 记录登录状态 |
logout | 退出用户登录 |
is_authenticated | 判断用户是否登录 |
login_required装饰器 | 进行登录判断 |
说明:is_authenticated可以用于模板上判断是否登录,同时对于ajax请求的视图类来判断是否登录。
浏览器 请求时用 login_required 来进行登录判断
- login_required用法一:
url(''', login_required(UserInfoView.as_view()), name='user')
- login_required用法二:
创建一个公共类 mixin.py
from django.contrib.auth.decorators import login_required
class LoginRequiredMixin(object):
@classmethod
def as_view(cls, **initkwargs):
# 调用父类的as_view
view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
return login_required(view)
调用
使用login_required,如果没登录django的认证系统会让页面导航到jango默认的login页面,我们需要修改默认的登录路径
修改settings文件的配置文件
# 配置登录url地址
LOGIN_URL='/user/login' # /accounts/login```
2. 用户注册
- django发送 注册激活 邮件
发送邮件需要第三方的smtp服务器,该项目采用的是免费的网易邮箱
开启网易邮箱 SMTP服务
settings.py配置:
# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smpt服务地址
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = 'xxxxxxxx@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'xxxxxxxx'
# 收件人看到的发件人
EMAIL_FROM = '天天生鲜<xxxxxxxx@163.com>'
封装发送邮件方法:
from django.core.mail import send_mail
from django.conf import settings
def send_register_active_email(to_email, username, token):
'''发送激活邮件'''
# 组织邮件信息
subject = '天天生鲜欢迎信息'
message = ''
sender = settings.EMAIL_FROM
receiver = [to_email]
html_message = '<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/%s">http://127.0.0.1:8000/user/active/%s</a>' % (username, token, token)
send_mail(subject, message, sender, receiver, html_message=html_message)
- celery 异步发送 注册激活 邮件
celery文档可参考:https://blog.csdn.net/cuomer/article/details/81214438
- 安装celery
pip install celery
- 封装异步任务方法
在项目目录下 创建celery_tasks的python包,在celery_tasks文件夹下创建tasks.py
from celery import Celery
from django.core.mail import send_mail
from django.conf import settings
# 创建一个Celery类的实例对象
app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/8')
# 定义任务函数
@app.task
def send_register_active_email(to_email, username, token):
'''发送激活邮件'''
# 组织邮件信息
subject = '天天生鲜欢迎信息'
message = ''
sender = settings.EMAIL_FROM
receiver = [to_email]
html_message = '<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/%s">http://127.0.0.1:8000/user/active/%s</a>' % (username, token, token)
send_mail(subject, message, sender, receiver, html_message=html_message)
- 使用
# 发邮件
send_register_active_email.delay(email, username, token)
- 启动worker
需要进入虚拟环境,才能运行
#启动worker
celery -A celery_tasks.tasks worker -l info