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

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

作者: CoderZb | 来源:发表于2019-02-19 01:03 被阅读8次

根据请求方式的不同(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

相关文章

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

    根据请求方式的不同(post、get),来调用views.py文件中不同的方法(例如:post请求的话就调用red...

  • django的as_view方法实现分析

    django的类视图拥有自动查找指定方法的功能, 通过调用是通过as_view()方法实现 urls.py vie...

  • CBV如何使用

    与FBV相比,CBV没有视图函数,而是继承视图类View,在url路由系统中,指定绑定视图类的as_view()函...

  • Class-based Views

    视图-Django REST框架 decorators.py views.py 基于类的视图 Django的基于类...

  • django 类视图解析 -FormView

    django 类视图可以帮我们轻松处理特定功能的逻辑,django 基本类视图分为四类: 基础类视图:ViewTe...

  • Django REST framework(二): DRF请求

    DRF请求生命周期解析 CBV的路由,调用视图的as_view(),一般业务视图很少定义自己的as_view(),...

  • 5.Django视图系统

    Django视图系统 Django的View一个视图函数(类),简称视图,是一个简单的Python 函数(类),它...

  • Django类视图笔记整理

    Django基于类的视图 1.基于类的视图简介 基于类的视图使用Python 对象实现视图,它提供除函数视图之外的...

  • django2.0入门教程第三节

    继上篇django2.0入门教程第二节,介绍了对django2.0模型类models的操作,本篇主要讲视图view...

  • 2.7 django类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/tzmtyqtx.html