Django类视图as_view()的原理和操作不当造成的相关问

2019-02-19  本文已影响8人  CoderZb

根据请求方式的不同(post、get),来调用views.py文件中不同的方法(例如:post请求的话就调用redirect(reverse('goods:index222')),get请求的话就调用 render(request,'register.html'))。

urls.py文件中的代码
from django.conf.urls import  url
from apps.user.views import RegisterView
urlpatterns = [
       url(r'^register',RegisterView.as_view(),name='register'),
]
views.py文件中的代码
image.png
from django.shortcuts import render,redirect
from django.urls import reverse
from apps.user.models import User
#继承View
from django.views.generic import View
import re

class RegisterView(View):
    '''注册'''
    def get(self,request):
        # GET请求方式的话,就显示注册界面的UI
        return render(request,'register.html')
    def post(self,request):
        # POST请求方式的话,就进行用户注册逻辑处理
        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': 'CoderZB提醒:数据不完整'})

        # 校验邮箱
        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': 'CoderZB提醒:邮箱格式不正确'})

        if allow != 'on':
            return render(request, 'register.html', {'errmsg': 'CoderZB提醒:请同意协议'})

        # 校验用户名是否存在
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # 用户名不存在
            user = None

        if user:
            # 用户名已存在
            return render(request, 'register.html', {'errmsg': 'CoderZB提醒:用户名已存在'})

        # 进行业务处理:进行用户注册
        user = User.objects.create_user(username, email, password)
        # 写上这句代码,数据库里面存储的当前用户的is_active字段就为0(未激活),不加这行代码is_active就为1
        user.is_active = 0
        user.save()

        # 返回应答,跳转到首页
        return redirect(reverse('goods:index222'))

我实际的页面执行步骤

image.png

使用类视图的话,注册页面的显示访问的是127.0.0.1:8000/user/register,那么点击注册按钮也必须通过/user/register的方式访问,不能通过/user/register_handle的访问。

image.png

如果坚持不改的话,会造成访问的路径不一致,导致正则匹配无法匹配到任何URL。如下动图效果

101.175518.gif
上一篇下一篇

猜你喜欢

热点阅读