01用户中心
一. 用户中心页面显示
- 
继承父模板 
- 
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": "用户名或密码错误"})
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号