当在要做页面路由时,可以把多个路由组合成一个。
首先先引入一个包
然后让一个类继承这个包
这里用登录与注册页面举个栗子
一般登录页面时用GET方法,点击注册时将会使用POST方法提交数据并跳转注册处理页面,所以要调用父类的get方法与post方法。
class RegisterView(View):
'''注册'''
def get(self,request):
'''显示注册页面'''
return render(request,'register.html')
def post(self,request):
'''进行注册处理'''
# 接受数据
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': '数据不完整'})
# 校验邮箱
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': '邮箱格式不正确'})
if allow != 'on':
return render(request, 'register.html', {'errmsg': '请同意协议'})
# 校验用户名是否重复
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# 用户名不存在
user = None
if user:
# 用户名已存在
return render(request, 'register.html', {'errmsg': '用户名已存在'})
# 进行业务处理:进行用户注册
user = User.objects.create_user(username, email, password)
user.is_active = 0
user.save()
# 返回一个应答,跳转到首页
return redirect(reverse('goods:index')) # 首页
在配置路由界面需要调用as_view()函数,也就是View里面的as_view(),它就会区分你的method
(页面请求方法)来调用不用的方法。
当请求页面方法为GET方法时,就会触发父类的get方法来打开注册页面,
当请求页面方法为POST方法时,就会触发父类的post方法来打开注册处理页面。
View里面还有delete,put,options方法,可运用的后台开发中,让路由整合,更方便快捷。