renshaoqi

准备工作

1、配置settings.py内置文件

注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常

2、创建应用

3、配置主路由

一、用户注册

1、创建用户注册model模型

1)设置模型抽象类

 2)进入user应用设置model

这里使用的是django内部AbstractUser用户类

2、显示用户注册页面

方法一:使用FBV请求处理

FBV:(function base views) 就是在视图里使用函数处理请求。

1)定义路由

import . import views
url(r\'^register$\', views.register, name=\'register\')

2)定义注册的视图函数

import re
from django.shortcuts import render, redirect
from .models import User
from django.core.urlresolvers import reverse

def register(request):
    \'\'\'显示注册页面\'\'\'
    if request.method == \'GET\':
        return render(request, \'register.html\')
    else:
        username = request.POST.get(\'user_name\')
        password = request.POST.get(\'pwd\')
        email = request.POST.get(\'email\')
        allow = request.POST.get(\'allow\')

        # 进行数据校验
        if not all([username, password, email]):
            # 数据不完整
            return render(request, \'register.html\', {\'errmsg\': \'数据不完整\'})

        # 邮箱校验
        if not re.match(r\'^[a-z0-9][\w\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$\', email):
            return render(request, \'register.html\', {\'errmsg\': \'邮箱格式不正确\'})

        # 天天生鲜协议校验
        if allow != \'on\':
            return render(request, \'register.html\', {\'errmsg\': \'请同意协议\'})

        # 校验用户名是否重复
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # 用户名不存在
            user = None
        if user:
            # 用户名以存在
            return render(request, \'register.html\', {\'errmsg\': \'用户名已存在\'})

        # 进行业务处理:用户注册
        user = User.objects.create_user(username, email, password)
        user.is_active = 0
        user.save()
        # 返回应答,跳转到首页
        return redirect(reverse(\'goods:index\'))

方法二:使用CBV请求处理(推荐)

CBV(class base views) 就是在视图里使用类处理请求。

1)定义路由

url(r\'^register$\', RegisterView.as_view(), name=\'register\'),  # 注册

2)定义注册视图类

import re
from django.shortcuts import render, redirect
from .models import User
from django.core.urlresolvers import reverse
from django.views.generic import View
from django.conf import settings
from django.http import HttpResponse

class RegisterView(View):
    """注册"""
    def get(self, request):
        """显示注册页面"""
        return render(request, \'register.html\')

    def post(self, request):
        """进行注册处理"""
        # 接收数据
        username = request.POST.get(\'user_name\')
        password = request.POST.get(\'pwd\')
        email = request.POST.get(\'email\')
        allow = request.POST.get(\'allow\')

        # 进行数据校验
        if not all([username, password, email]):
            # 数据不完整
            return render(request, \'register.html\', {\'errmsg\': \'数据不完整\'})

        # 邮箱校验
        if not re.match(r\'^[a-z0-9][\w\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$\', email):
            return render(request, \'register.html\', {\'errmsg\': \'邮箱格式不正确\'})

        # 天天生鲜协议校验
        if allow != \'on\':
            return render(request, \'register.html\', {\'errmsg\': \'请同意协议\'})

        # 校验用户名是否重复
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # 用户名不存在
            user = None
        if user:
            # 用户名以存在
            return render(request, \'register.html\', {\'errmsg\': \'用户名已存在\'})

        # 进行业务处理:用户注册
        user = User.objects.create_user(username, email, password)
        user.is_active = 0
        user.save()
        # 返回应答,跳转到首页
        return redirect(reverse(\'goods:index\'))

3)激活邮箱

1)下载加密签名数据包

2)设置路由,编写代码逻辑

class ActiveView(View):
    """用户激活"""
    def get(self, request, token):
        """进行用户激活"""
        # 进行解密 获取要激活的用户信息
        serializer = Serializer(settings.SECRET_KEY, 3600)
        try:
            info = serializer.loads(token)
            # 获取待激活用户的id
            user_id = info[\'confirm\']

            # 根据id获取用户信息
            user = User.objects.get(id=user_id)
            user.is_active = 1
            user.save()

            # 跳转到登录页面
            return redirect(reverse(\'user:login\'))
        except SignatureExpired as e:
            # 激活链接已过期
            return HttpResponse(\'激活链接已过期\')
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, SignatureExpired
from django.core.mail import send_mail
# 发送激活邮件 包含激活链接:Http://127.0.0.1:8000/user/active/3
# 激活链接中需要包含用户的身份信息 并且要把身份信息进行加密
# 加密用户的身份信息 生成激活token
class Register(View):
  ...
  serializer = Serializer(settings.SECRET_KEY, 3600)   info = {\'confirm\': user.id}   token = serializer.dumps(info)   token = token.decode(\'utf-8\')

4)发送邮箱

流程:Django网站--->smtp服务器--->目的邮箱

配置settings.py

class Register(View):
  ...
  # 发邮箱   subject = \'天天生鲜欢迎信息\'   message = \'邮件正文\'   sender = settings.EMAIL_FROM   receiver = [email]   html_message = f\'<h1>{username},欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户\' \    f\'<a href="http://127.0.0.1:8000/user/active/{token}">http://127.0.0.1:8000/user/active/{token}</a>\'   send_mail(subject, message, sender, receiver, html_message=html_message)

 

  

 

 

  

分类:

技术点:

相关文章:

  • 2022-01-02
  • 2021-11-29
  • 2021-10-11
  • 2021-12-09
  • 2021-10-16
  • 2021-10-03
  • 2021-09-26
  • 2021-05-12
猜你喜欢
  • 2021-10-17
  • 2021-10-18
  • 2021-05-04
  • 2021-09-25
  • 2022-01-06
  • 2021-04-11
相关资源
相似解决方案