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_url
if request.method == 'GET':
# 获取从url传递来的登录前的url
cur_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对象,否则返回None
user = 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'] = True
request.session['username'] = cd['username']
#设置session有效期为?秒,不管操作不操作系统,10秒后都会自动失效
# request.session.set_expiry(6000) # 校验成功后跳转至登录前的页面
return redirect(cur_url)
Django:文章详情页面评论功能需要登录后才能使用,登录后自动返回到文章详情页的更多相关文章
- 解决 ECSHOP v273 产品详情页面评论不显示的问题
问题描述: 最近同事使用ECSHOP v273帮客户开发了一个商城系统,部署到服务器在测试的时候发现产品详情页面里测试的评论不显示,只显示了数量(其实是产品购买的次数) 因为同事搞了好长时间都 ...
- WordPress实现长篇文章/日志/单页面分页功能效果
在WordPress里写文章,如果内容很多,你可能想要把文章分成几页来让访客浏览,这样既保持了网页的美观,也提高了网页的打开速度.但是在WordPress默认提供的按钮里,你可能找不到文章分页功能所对 ...
- day82:luffy:课程详情页面显示&章节和课时显示&视频播放组件&CKEditor富文本编辑器
目录 1.初始课程详情页面 2.视频播放组件 3.课程详情页面后端接口实现 4.课程详情页面-前端 5.CKEditor富文本编辑器 6.课程章节和课时显示-后端接口 7.课程章节和课时显示-前端 1 ...
- Django——实现评论功能(包括评论回复)
提示:(1)功能不全面,仅仅实现评论(2)样式简单 1.项目目录结构 2.模型 from django.db import models from django.contrib.auth.models ...
- [个人网站搭建]·Django增加评论功能(Python3)
[个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ...
- 基于SpringBoot从零构建博客网站 - 开发文章详情页面
文章详情页面是博客系统中最为重要的页面,登录用户与游客都可以浏览文章详情页面,只不过只有登录用户才能进行其它的一些操作,比如评论.点赞和收藏等等. 本次的开发任务只是将文章详情页面展示出来,至于一些收 ...
- Django——实现最基础的评论功能(只有一级评论)
我对评论功能的理解: --------(1)数据库建一个评论的表 --------(2)前端建一个提交评论的form表单 --------(3)表单提交评论内容后写入到数据库评论表中 -------- ...
- Django使用forms来实现评论功能
貌似Django从版本1.6开始就放弃了对自带的comments的使用,具体原因未查,但是现在使用Django的内部的模块也可以实现评论功能,那就是借助于forms模块,下面是我的一个小例子. 环境准 ...
- editormd实现文章详情页面预览
继之前博客写了editmd.js(国内开源的一款前端Markdown框架)实现的写文章功能之后,本博客介绍使用editormd实现文章预览功能,之前博客链接:https://blog.csdn.net ...
随机推荐
- jquery轮播事件效果
今天闲着有时间把轮播事件重新写了一下,发现以前用的很多插件大多支持度不算太友好,很多小问题 自己写了一个,不好地方请指教 先建立文件,css,js,图片,引入jquery <!DOCTYPE h ...
- 15组-Legendary-团队项目总结
一.项目名称:教室选座系统 二.项目进度表: 项目进度表 活动名称 所属阶段 计划开始时间 计划结束时间 实际结束时间 完成情况 项目方向 项目确立阶段 2019.11.14 2019.11.15 2 ...
- Ubuntu 18.04安装NVIDIA显卡驱动教程
最近遇到了在Ubuntu 18.04上安装NVIDIA显卡驱动的情况,看到一篇教程讲解的很好,拿来收藏. 安装NVIDIA显卡驱动风险极大,新手注意. 在Ubuntu 18.04上安装 ...
- 模拟I2C协议学习点滴之原理框架
I2C是一种串行总线协议. 目前几种常用的串行总线有UART.SPI和I2C协议.UART协议的总线只有两条,发送(Transmit:TX)和接收(Receive:RX),没有时钟信号,这就要求两位数 ...
- [Luogu] 奶酪
https://www.luogu.org/problemnew/show/3958 #include <iostream> #include <cstdio> #includ ...
- splay树 1285 宠物收养所
#include<cstdio> #include<iostream> using namespace std; int shu[80004][2],n,size,root,k ...
- 8、RDD持久化
一.RDD持久化 1.不使用RDD持久化的问题 2.RDD持久化原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中.当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的par ...
- Python里面match()和search()的区别?
答:re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配. re模块中research(pattern,string[,flags]), ...
- python 根据时间戳获取秒🐱
print("当前时间: ",time.strftime('%Y.%m.%d %H:%M:%S ',time.localtime(time.time()))) import tim ...
- ftp连接
package enterprise.celerity.ac.util; import java.io.IOException;import java.io.InputStream;import ja ...