01用户中心

一. 用户中心页面显示

  1. 继承父模板

  2. user子应用 定义视图类,传递参数控制页面显示

  3. 定义urls

  4. 修改模板内页面跳转,反向解析:

二. 登录装饰器和登录后页面跳转

内置认证类校验登录

  1. 在urls.py调用校验方法,路径中使用方法包住函数类

如果没有登录的话会跳转到登录页,后面拼接从那个页面跳转的: xxx/login?next=user/address

  1. settings.py配置 未登录页面
# 配置登录url地址
LOGIN_URL='/user/login'
# 注意: form标签不设置表单action时,提交表单时,会向浏览器地址栏中的地址提交数据

  1. 登录页调整登录后跳转页面
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": "用户名或密码错误"})

posted @ 2024-07-15 14:09  测试圈的彭于晏  阅读(9)  评论(0)    收藏  举报