路由配置
在子模块users的views.py中定义视图函数
class RegisterView(View):
"""
用户注册
"""
def get(self, request):
"""
提供数据
提供用户注册页面
前后端不分离--后端渲染页面:render
:param request:请求对象,本次请求的报文信息
:return:
"""
return render(request, 'register.html')
def post(self, request):
"""
实现用户注册业务逻辑
# 1. 接收参数
# 2. 校验参数
前后端的校验需要分开,避免恶意用户越过前端逻辑发送请求,保证后端的安全,前后端的校验逻辑相同
2.1 判断参数是否齐全:
all([]):
回去校验列表中的元素是否为空,只要有一个为空,返回false
2.2 判断用户名是否是5-20个字符
2.3 判断两次输入的密码是否一致
2.4 判断手机号是否合法
2.5 判断用户是否勾选了协议
# 3. 保存注册数据:是注册业务的核心
# 4. 响应结果
:param request:
:return:
"""
在项目的urls.py中配置总路由
url(r'^', include('users.urls', namespace='users')),
在子模块的urls.py中配置子路由
from django.conf.urls import url, include
from django.contrib import admin
from . import views
urlpatterns = [
# 用户注册:reverse(users:register) , users:register等效 '/register/'
url(r'^register/$', view=views.RegisterView.as_view(), name='register')
]
重定向、反向解析,避免使用静态路由
命名空间
例子:
用户注册成功后返回首页
class RegisterView(View):
"""
用户注册
"""
def get(self, request):
return render(request, 'register.html')
def post(self, request):
......
# reverse反向解析:reverse(总路由-命名空间:子路由),reverse('contents:index') == '/'
return redirect(reverse('contents:index'))
使用静态路由的缺点:
一旦子模块的路由发生改变,需要手动更改所有使用这个路由的地方
如果采用路由的命名空间去动态解析路由,则可以避免这个问题,只要命名空间、子路由命名不变则可以随意更改路由的值
例如:
总路由为:url(r'^', include('contents.urls', namespace='contents')),
命名空间为contents
子路由为url(r'^$', view=views.IndexView.as_view(), name='index')
子路由名称为index
则revers('contents':'index')
等效于'/'