要实现的功能:登陆验证后跳转到个人中心并显示当前登陆的用户名
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')