美文网首页
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()的原理和操作不当造成的相关问

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