django2视图函数之间传值(url/session)

要实现的功能:登陆验证后跳转到个人中心并显示当前登陆的用户名
1.通过url传值
登陆视图

def login(request):
    if  request.method=='POST':
        form=LoginForm(request.POST)
        email = request.POST.get('email')
        pwd = request.POST.get('pwd')
        # 登录验证(邮箱去重),查看邮箱是否存在
        is_email = User.objects.filter(email=email)
        # is_username_exist = User.objects.filter(username=username).exists()
        if is_email:
            ##通过email获取数据库中对应的passwd
            check_passwd=((User.objects.filter(email=email).values())[0]).get('passwd')
            ##check_password将输入的密码和数据库中解密的散列密码对比
            if check_password(pwd,check_passwd):
                ##保存email到session
                # request.session['email'] = email
                ##session 默认有效时间为两周,也可设置缓存时间为6000s
                # request.session.set_expiry(6000)
                
                ##重定向到user(用户中心)
                ##redirect(to, *args, permanent=False, **kwargs),to:url
                #reverse将(view function or pattern name)反向解析为url
                return redirect("/user/%s" %email)
            else:
                messages.warning(request,'密码错误')
                return redirect(reverse("login"))


        else:
            messages.warning(request,'邮箱未注册,请前往注册')

    else:
        form=LoginForm()
    return  render(request,'login.html',locals())

用户中心视图函数

##用户中心
##限制未登陆用户访问
@login_required(login_url='login/')   ##重定向的url,可以写参数也可以在settings中配置
def  UserCenter(request,email):
    #客户端ip
    ##request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,
    # 比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)
    user=request.user
    user_agent=request.META.get('HTTP_USER_AGENT', 'unknown')
    #如果被访问对象(被访问的网站),使用了透明代理服务器,那x_forwarded_for就是客户端的真实ip所在了
    #
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ##没有使用代理
        ip = request.META.get('REMOTE_ADDR')
    # ip=request.META['REMOTE_ADDR']
    # context={'user':user,'user_agent':user_agent,'ip':ip,'eamil':email}
    ##用locals比较好,locals加载的比较全面
    return render(request, 'user.html',locals())

配置跳转后用户中心的urls

   path('user/<str:email>',views.UserCenter,name='user'),

用户中心前端页面

                    <ul>
                        <li>用户信息</li>
                        <li>Email:{{ email }}</li>
                        <li>User:{{ user }}</li>
                        <li>User_Agent:{{ user_agent }}</li>
                        <li>IP Address:{{ ip }}</li>
                    </ul>

在这里插入图片描述
2.通过session传值

email=request.session.get('email')

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值