1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Django:文章详情页面评论功能需要登录后才能使用 登录后自动返回到文章详情页...

Django:文章详情页面评论功能需要登录后才能使用 登录后自动返回到文章详情页...

时间:2022-12-09 16:19:34

相关推荐

Django:文章详情页面评论功能需要登录后才能使用 登录后自动返回到文章详情页...

背景:

文章详情页正在查看文章,想评论一下写的不错,但是需要先登录才能。页面长这个样子:

方案:

1、点击登录链接时,将该页面的URL传递到登录视图中

request.path获取的是当前页面的相对路径

请<a href="{% url 'account:user_login' %}?cur_url={{ request.path }}">登录</a>后回复

登录时的URL如下图,会带上之前页面的相对url

2、在登录视图中获取该cur_url的值,等待登录成功后跳转

def user_login(request):# 定义为全局变量,post登录请求后依然可以使用该变量进行跳转global cur_urlif request.method == 'GET':# 获取从url传递来的登录前的urlcur_url = request.GET.get('cur_url')login_form = LoginForm()return render(request, "account/login2.html", {"form": login_form})if request.method == 'POST':#request.POST将前台数据传递给表单类,生成一个绑定实例login_form = LoginForm(request.POST)#如果数据合法则进行数据清洗,返回输入的数据(字典格式)if login_form.is_valid():cd = login_form.cleaned_data# 如果给定的凭据有效则返回一个User对象,否则返回Noneuser = authenticate(username=cd['username'], password=cd['password'])if user:#如果user不为None(既通过了凭据验证返回了user对象),使用系统自带的login方法登录login(request, user)else:error_msg = "账号与密码不匹配"return render(request, 'account/login2.html', {'form': login_form, 'error_msg': error_msg})else:error_msg = '请输入合法数据'return render(request, 'account/login2.html', {'form': login_form, 'error_msg': error_msg})# 设置session信息request.session['is_login'] = Truerequest.session['username'] = cd['username']#设置session有效期为?秒,不管操作不操作系统,10秒后都会自动失效# request.session.set_expiry(6000)# 校验成功后跳转至登录前的页面return redirect(cur_url)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。