背景:

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

方案:

  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:文章详情页面评论功能需要登录后才能使用,登录后自动返回到文章详情页的更多相关文章

  1. 解决 ECSHOP v273 产品详情页面评论不显示的问题

    问题描述:   最近同事使用ECSHOP v273帮客户开发了一个商城系统,部署到服务器在测试的时候发现产品详情页面里测试的评论不显示,只显示了数量(其实是产品购买的次数)   因为同事搞了好长时间都 ...

  2. WordPress实现长篇文章/日志/单页面分页功能效果

    在WordPress里写文章,如果内容很多,你可能想要把文章分成几页来让访客浏览,这样既保持了网页的美观,也提高了网页的打开速度.但是在WordPress默认提供的按钮里,你可能找不到文章分页功能所对 ...

  3. day82:luffy:课程详情页面显示&章节和课时显示&视频播放组件&CKEditor富文本编辑器

    目录 1.初始课程详情页面 2.视频播放组件 3.课程详情页面后端接口实现 4.课程详情页面-前端 5.CKEditor富文本编辑器 6.课程章节和课时显示-后端接口 7.课程章节和课时显示-前端 1 ...

  4. Django——实现评论功能(包括评论回复)

    提示:(1)功能不全面,仅仅实现评论(2)样式简单 1.项目目录结构 2.模型 from django.db import models from django.contrib.auth.models ...

  5. [个人网站搭建]·Django增加评论功能(Python3)

    [个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ...

  6. 基于SpringBoot从零构建博客网站 - 开发文章详情页面

    文章详情页面是博客系统中最为重要的页面,登录用户与游客都可以浏览文章详情页面,只不过只有登录用户才能进行其它的一些操作,比如评论.点赞和收藏等等. 本次的开发任务只是将文章详情页面展示出来,至于一些收 ...

  7. Django——实现最基础的评论功能(只有一级评论)

    我对评论功能的理解: --------(1)数据库建一个评论的表 --------(2)前端建一个提交评论的form表单 --------(3)表单提交评论内容后写入到数据库评论表中 -------- ...

  8. Django使用forms来实现评论功能

    貌似Django从版本1.6开始就放弃了对自带的comments的使用,具体原因未查,但是现在使用Django的内部的模块也可以实现评论功能,那就是借助于forms模块,下面是我的一个小例子. 环境准 ...

  9. editormd实现文章详情页面预览

    继之前博客写了editmd.js(国内开源的一款前端Markdown框架)实现的写文章功能之后,本博客介绍使用editormd实现文章预览功能,之前博客链接:https://blog.csdn.net ...

随机推荐

  1. Visual Studio Code IDE + Docker实现PHP Xdebug调试

    一.Docker中安装配置Xdebug 通过phpinfo()输出当前安装的PHP版本信息,将信息拷贝到https://xdebug.org/wizard.php相应输入框中,系统会自动检测并推荐合适 ...

  2. vscode源码编译疑难问题

    最近把原来老的源码merge到了新的1.15版本源码,以前的依赖问题会导致各种错误,Loading "gc-signals" failed啦,Error: %1 is not a ...

  3. 读取Excel数据到DataTable

    读取Excel数据到DataTable 代码 /// <summary> /// 获取指定路径.指定工作簿名称的Excel数据:取第一个sheet的数据 /// </summary& ...

  4. CSP2019 D1T3 树上的数 (贪心+并查集)

    题解 因为博主退役了,所以题解咕掉了.先放个代码 CODE #include<bits/stdc++.h> using namespace std; const int MAXN = 20 ...

  5. java.sql.SQLException: connection holder is null;

    一.问题来源分析 出现的错误 : Cause: java.sql.SQLException: connection holder is null; uncategorized SQLException ...

  6. php MySQL 选择数据库

    在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库. 从命令提示窗口中选择MySQL数据库 在 mysql> 提示窗口中可以很简单的选择特定的数据库.你 ...

  7. Linux操作系统常用命令合集——第四篇-文件系统权限操作(5个命令)

    1.umask [命令作用] 文件或目录创建时的遮罩码 [命令语法] umask     [选项]    [参数] [常用选项] -p  --输出的权限掩码可直接作为指令来执行 -s  --以符号方式 ...

  8. jquery入门使用

    目录 jquery入门使用 1.jQuery简介 jQuery介绍 jQuery优点 2.jQuery的load方法 load方法介绍 load实例 代码 3.jQuery的get方法 get()方法 ...

  9. Java基础系列 - 子类继承父类,调用父类的构造函数

    package com.test7; public class test7 { public static void main(String[] args) { Son son = new Son(1 ...

  10. js 返回两数(包含这两数)之间的随机数函数

    function selectFrom( lowerValue, upperValue ){ var choices = upperValue - lowerValue + 1; return Mat ...