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.pngfrom 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'))