一. 用户中心页面显示
-
继承父模板
-
user子应用 定义视图类,传递参数控制页面显示
-
定义urls
-
修改模板内页面跳转,反向解析:
二. 登录装饰器和登录后页面跳转
内置认证类校验登录
- 在urls.py调用校验方法,路径中使用方法包住函数类
如果没有登录的话会跳转到登录页,后面拼接从那个页面跳转的: xxx/login?next=user/address
- settings.py配置 未登录页面
# 配置登录url地址
LOGIN_URL='/user/login'
# 注意: form标签不设置表单action时,提交表单时,会向浏览器地址栏中的地址提交数据
- 登录页调整登录后跳转页面
class LoginView(View):
"""登录"""
def get(self, request):
"""显示登录页面"""
# 判断是否记住了用户名
if 'username' in request.COOKIES:
username = request.COOKIES.get('username')
checked = 'checked'
else:
username = ''
checked=''
return render(request, 'login.html',{'username':username,'checked':checked})
def post(self, request):
"""登录校验"""
# 1. 接收数据
username = request.POST.get('username')
password = request.POST.get('pwd')
# 2. 校验数据
if not all([username, password]):
return render(request, 'login.html', {"errmsg": "数据不完整"})
# 3. 业务处理:登录校验
# django内置校验user,有的话返回对象,没有返回None
user = authenticate(username=username, password=password)
if user is not None:
# 用户名或密码正确
if user.is_active:
# 用户已激活
# 记录用户登录状态
login(request, user) # 内置认证: 记录登录状态
# 获取登录后所要跳转的地址,直接访问登录页就不会有next,设置一个默认值:首页
# 默认跳转到首页
next_url = request.GET.get('next',reverse('goods:index'))
# 跳转到next_url
response = redirect(next_url) # 先获取返回对象HttpResponseRedirect
# 判断是否需要记住用户名
remember = request.POST.get('remember')
if remember == "on":
# 记住用户名
response.set_cookie('username', username, max_age=7 * 24 * 3600)
else:
response.delete_cookie('username')
# 返回response
return response
else:
# 用户未激活
return render(request, 'login.html', {"errmsg": "账户未激活"})
else:
# 用户名或密码错误
return render(request, 'login.html', {"errmsg": "用户名或密码错误"})
标签:username,01,中心,登录,request,用户,user,跳转,login
From: https://www.cnblogs.com/kh-1314/p/17722809.html