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

根据请求方式的不同(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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 切换到创建项目的目录 cd C:\Users\admin\Desktop\DjangoProject创建名为pr...
    在努力中阅读 3,314评论 2 3
  • 此段内容简要来自自强学堂的教程详情请查询自强学堂 一、 后台的运作流程 接收request请求 处理数据 获取请求...
    coder_ben阅读 5,257评论 6 56
  • 用户注册并向163邮箱发送邮件(两种方式:同步和异步,ubuntu和windows上的不同) **********...
    楚糖的糖阅读 1,529评论 0 5
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,093评论 0 8
  • 一、断舍离 物《断舍离》停止购买、舍弃换季小长假实施 食、对身体断舍离,饮食调整;净食 气、好的居家办公空间调整风...
    小兵_快跑阅读 153评论 0 1