Django用户登录后的‘重定向’

news/2024/9/23 15:33:31/

有查看用户信息的url如下:

http://127.0.0.1:8000/account/my-information/

在urls.py文件中定义,处理该url的view函数为views.py文件中的myself。

python">path('my-information/',views.myself, name='my_information')

处理该url的view函数如下。表明,只有在用户登录的情况下才能执行。

python">@login_required() #装饰器函数,只有登录才执行下面代码
def myself(request):if hasattr(request.user, 'userprofile'):userprofile = UserProfile.objects.get(user=request.user)else:userprofile = UserProfile.objects.create(user=request.user)if hasattr(request.user, 'userinfo'):userinfo = UserInfo.objects.get(user=request.user)else:userinfo = UserInfo.objects.create(user=request.user)context = {"user":request.user, "userinfo":userinfo, "userprofile":userprofile}return render(request, "account/myself.html", context)

在项目的setting文件中做如下设置。功能为:在没有通过用户登录状态检查时,跳转至该url

python">LOGIN_URL = '/account/login/'

注意,此时页面虽然跳转到了登录url,但是其中附加了一个next变量。该变量后面的内容表明在登录完成后希望能够自动跳转的位置。

http://127.0.0.1:8000/account/login/?next=/account/my-information/

为了实现自动跳转,需要修改登录页面的html文件,内容如下。

{% if next %}<form class="form-horizontal" action="{% url 'account:user_login' %}?next={{ next }}" method="post">
{% else %}<form class="form-horizontal" action="{% url 'account:user_login' %}" method="post">
{% endif %}{% csrf_token %}<!--以下为表单的具体内容,省略-->

这段代码是 Django 模板语言的代码,用于在模板中根据条件渲染不同的 HTML 表单。

具体来说,它做了以下操作:

  • {% if next %}:检查是否存在名为 next 的变量。如果 next 存在且为真值(不为空),则执行下面的代码块。
  • <form class="form-horizontal" action="{% url 'account:user_login' %}?next={{ next }}" method="post">:这是一个 HTML 表单元素,它的 action 属性指定了表单提交的目标 URL。在这里,它使用了模板标签 {% url 'account:user_login' %} 来生成登录视图的 URL,并在 URL 后面附加了查询字符串 next={{ next }}next 是一个变量,它的值是登录后要重定向到的地址(如果有的话)。表单的提交方法为 POST
  • {% else %}:如果上述条件不成立,即 next 不存在或为空,则执行下面的代码块。
  • <form class="form-horizontal" action="{% url 'account:user_login' %}" method="post">:这也是一个 HTML 表单元素,它的 action 属性指定了表单提交的目标 URL。与前面不同的是,这里没有附加查询字符串,所以不会进行重定向。表单的提交方法为 POST

这段代码的作用是,如果存在 next 变量且不为空,则生成一个带有 next 参数的登录表单,用于在登录后重定向到指定的地址;如果 next 不存在或为空,则生成一个普通的登录表单。


http://www.ppmy.cn/news/1458436.html

相关文章

nodejs中与终端控制台交互

通过nodejs里提供的readline&#xff0c;做到与终端控制台交互 const fs require("fs"); // 与终端控制台交互 const readline require("readline");// 终端的输入输出 const r1 readline.createInterface({// 控制台输出output: process.stdout,// 控…

手写Spring Ioc 循环依赖底层源码剖析

手写Spring Ioc 循环依赖底层源码剖析 前言 Spring Ioc 是一个非常重要的框架&#xff0c;它的核心是依赖注入&#xff08;DI&#xff09;和控制反转&#xff08;IOC&#xff09;。在使用 Spring Ioc 的过程中&#xff0c;我们经常会遇到循环依赖的问题。本文将介绍手写 Spri…

sql注入手注语句

?id100 union select 1,database(),3-- asd ​ ?id100 union select 1,table_name,3 from information_schema.tables where table_schemasecurity limit 0,1-- asd ?id100 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemada…

第1个数据库:编号,文本,时间,

写一个数据库 编号 文本 时间1 第一个文本 有100万条数据 -- 创建一个名为texts的表格来存储数据 CREATE TABLE texts ( id INTEGER PRIMARY KEY, text TEXT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 插入数据INSERT INTO texts (text) VALUES (第一个文…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台&#xff0c;部署为独立的调度服务平台 github地址&#xff1a;xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度…

走进SVG:不懂就OUT了!

在当今的数字世界里&#xff0c;图形设计和网页设计是我们生活的重要组成部分。无论是滚动你的社交媒体页面&#xff0c;还是浏览你最喜欢的网站&#xff0c;你都会接触到各种图形和图像。其中&#xff0c;有一种特殊的文件格式被广泛使用&#xff0c;它可以给你带来前所未有的…

使用凌鲨建立软件研发技能学习小组

凌鲨(OpenLinkSaas)的团队功能除了提供论坛功能&#xff0c;还能记录团队成员的成长记录。 使用方法 打开团队功能 团队功能在默认情况下是关闭的&#xff0c;你可以在登录后打开团队功能开关。 创建学习团队 日报/周报/个人目标一般是企业团队需要&#xff0c;建议关闭。 …

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(2)

从浅入深 学习 SpringCloud 微服务架构&#xff08;八&#xff09;Sentinel&#xff08;2&#xff09; 一、sentinel&#xff1a;通用资源保护 1、Rest 实现熔断 Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护, 在构造 RestTemplate…