Python 从0开始 一步步基于Django创建项目(10)用户登录和注销

news/2024/4/29 13:31:43/文章来源:https://blog.csdn.net/wanghuizheng/article/details/137065646

Django项目中,已经包含了应用程序city_infos,用于存储城市相关信息,实现增删改查操作。

针对用户管理,需要新建项目user.

步骤如下:

1、创建新项目users

启动虚拟环境,导航至项目根目录:C:\D\Python\Python310\study\snap_gram,执行创建应用程序命令。

(sg_env) C:\D\Python\Python310\study\snap_gram>python manage.py startapp users

执行命令后,在根目录下新生成文件夹users,其结构与city_infos相同。

2、将应用程序users纳入Django项目

具体包含两步:

1)修改C:\D\Python\Python310\study\snap_gram\snap_gram目录下的settings.py文件

INSTALLED_APPS = [#my app'city_infos','users',

2)修改同一路径下的urls.py文件

urlpatterns = [path('admin/', admin.site.urls),path('users/',include('users.urls')),path('',include('city_infos.urls')),
]

这行代码与任何以单词users打头的URL(如http://localhost:8000/users/login/)都匹配。

3、实现用户登录

1)新建C:\D\Python\Python310\study\snap_gram\users路径下的urls.py文件

定义users应用程序中的url,用于用户登录。

登录页面的URL模式与URL http://localhost:8000/users/login/匹配。

'''users urls'''from django.urls import path, includeapp_name = 'users'#命名空间urlpatterns = [#通过include方法,使用Django定义的默认身份验证URLpath('',include('django.contrib.auth.urls')),
]

2)新建C:\D\Python\Python310\study\snap_gram\users\templates\registration路径下的login.html文件

用户请求登录页面时,Django将使用一个默认的view函数,与之对应的html文件定义如下:

<!-- 一个应用程序中的模板可继承另一个应用程序中的模板 -->
{% extends "city_infos/base.html" %}{% block content %}<!-- 设置表单的errors属性,表单是Django自带的 -->{% if form.errors %}<p>您的用户名或密码不匹配,请重试。</p>{% endif %}<!-- 对提交的登录信息进行处理 --><form method="post" action="{% url 'users:login' %}">{% csrf_token %}{{ form.as_p }}<!-- 显示表单内容 --><button name="submit">登录</button><!-- next:登录后重定向 --><input type="hidden" name="next"value="{% url 'city_infos:index' %}" /></form>
{% endblock content %}

3)修改C:\D\Python\Python310\study\snap_gram\city_infos\templates\city_infos路径下的base.html文件

增加‘登录’链接。

<p><a href="{% url 'city_infos:index'%}">City Info</a>--<a href="{% url 'city_infos:cities'%}">Cities</a>--<!-- user是Django自带的,判断已经登录,则显示主页index.html信息否则,显示登录页面users/login.html信息 -->{% if user.is_authenticated %}Hello,{{user.username}}.{% else %}<a href="{% url 'users:login' %}">登录</a>{% endif %}
</p>{% block content %}{% endblock content %}

4、实现用户注销

1)修改C:\D\Python\Python310\study\snap_gram\users路径下的urls.py文件

定义用于注销的URL,127.0.0.1:8000/users/custom_logout。

urlpatterns = [#通过include方法,使用Django定义的默认身份验证URLpath('',include('django.contrib.auth.urls')),#注销path('custom_logout/',views.custom_logout,name='custom_logout'),
]

2)新建C:\D\Python\Python310\study\snap_gram\users路径下的views.py文件

响应注销URL。

from django.shortcuts import render, redirect
from django.contrib.auth import logout# Create your views here.
def custom_logout(request):if request.method == 'POST':logout(request)return redirect('city_infos:index')return render(request, 'users/logged_out.html')

3)新建C:\D\Python\Python310\study\snap_gram\users\templates\users路径下的logged_out.html文件。

在这一步中,html文件是我们自定义的注销页面,所以不能放在C:\D\Python\Python310\study\snap_gram\users\templates\registration路径下。

在服务器中,要求注销操作以post的方式提交。

{% extends "city_infos/base.html" %}{% block content %}<h1>确认:</h1><p>确认注销?</p><form method="post">{% csrf_token %}<button name="submint">注销</button></form><a href="{% url 'city_infos:index' %}">取消</a>
{% endblock content %}

4)修改

添加注销操作链接。这个操作是<a打头,request提交的方式是GET,所以服务器不会执行注销操作,必须把GET提交,改变为POST提交

{% if user.is_authenticated %}Hello,{{user.username}}.<a href="{% url 'users:custom_logout' %}">注销</a>

以GET方式提交注销时,服务器提示:

Method Not Allowed (GET): /users/logout/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1028026.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CDA二级数据分析备考思维导图】

CDA二级数据分析备考思维导图 CDA二级复习备考资料共计七个章节&#xff0c;如需资料&#xff0c;请留言&#xff0c;概览如下图&#xff1a;一、数据采集与处理1.数据采集方法2.市场调研和数据录入3、数据探索与可视化4、数据预处理方法 总结&#xff1a;以上为自己学习数据分…

修改 RabbitMQ 默认超时时间

MQ客户端正常运行&#xff0c;突然就报连接错误&#xff0c; 错误信息写的很明确&#xff0c;是客户端连接超时。 不过很疑虑&#xff0c;为什么会出现连接超时呢&#xff1f;代码没动过&#xff0c;网络也ok&#xff0c;也设置了心跳和重连机制。 最终在官网中找到了答案&am…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架&#xff1a;java、springboot 2.UI界面&#xff1a;jQuery、HTML、CSS、 VUE 3.开发工具&#xff1a;IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. 系…

harmonyos:显示图片(Image)

开发者经常需要在应用中显示一些图片&#xff0c;例如&#xff1a;按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现&#xff0c;Image支持多种图片格式&#xff0c;包括png、jpg、bmp、svg和gif&#xff0c;具体用法请参考Image组件。 Image通过调…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…

快麦ERP中采购单在旺店通中同步退货

什么是快麦ERP 快麦ERP作为专业的电商ERP系统软件&#xff0c;为所有的商家提供涵盖订单、库存、分销、采购、财务、员工绩效等一体化的电商ERP解决方案。通过仓储数字化升级和库存精准化管理&#xff0c;帮助商家有更高效的工作体系&#xff0c;以数字赋能大卖家实现降本增效…

探索数据库--------------mysql主从复制和读写分离

目录 前言 为什么要主从复制&#xff1f; 主从复制谁复制谁&#xff1f; 数据放在什么地方&#xff1f; 一、mysql支持的复制类型 1.1STATEMENT&#xff1a;基于语句的复制 1.2ROW&#xff1a;基于行的复制 1.3MIXED&#xff1a;混合类型的复制 二、主从复制的工作过程 三个重…

2.9 Python缩进规则(包含快捷键)

Python缩进规则&#xff08;包含快捷键&#xff09; 和其它程序设计语言&#xff08;如 Java、C 语言&#xff09;采用大括号“{}”分隔代码块不同&#xff0c;Python采用代码缩进和冒号&#xff08; : &#xff09;来区分代码块之间的层次。 在 Python 中&#xff0c;对于类…

2核4g服务器能支持多少人访问?阿里云2核4g服务器在线人数

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

网络七层模型之数据链路层:理解网络通信的架构(二)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

新穗青少年开展“小小公民科学家”科考活动探索生物多样性

为帮助“新穗”青少年了解本土文化&#xff0c;提升个人知识面和动手能力&#xff0c;贯彻落实《未成年人保护法》《家庭教育促进法》《广东省生态环境教育条例》等有关文件精神&#xff0c;3月24日&#xff0c;天河区绿日同学公益服务促进会联合华南农业大学农潮工作室、广州城…

Qt中QIcon图标设置(标题、菜单栏、工具栏、状态栏图标)

1 exe程序图标概述 在 Windows 操作系统中&#xff0c;程序图标一般会涉及三个地方&#xff1b; &#xff08;1&#xff09; 可执行程序&#xff08;以及对应的快捷方式&#xff09;的图标 &#xff08;2&#xff09; 程序界面标题栏图标 &#xff08;3&#xff09;程序在任务…

获取高德安全码SHA1

高德开发者平台上给的三种方法 获取安全码SHA1&#xff0c;这里我自己使用的是第三种方法。 1、通过Eclipse编译器获取SHA1 使用 adt 22 以上版本&#xff0c;可以在 eclipse 中直接查看。 Windows&#xff1a;依次在 eclipse 中打开 Window -> Preferances -> Androi…

Linux/Paper

Paper Enumeration nmap 第一次扫描发现系统对外开放了22&#xff0c;80和443端口&#xff0c;端口详细信息如下 可以看到三个端口的详细信息&#xff0c;22端口运行着ssh服务&#xff0c;80端口运行着http&#xff0c;而443为https&#xff0c;可以访问web进一步获取信息 H…

网络七层模型之传输层:理解网络通信的架构(四)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

前端学习-CSS基础-Day3

一、CSS三大特性 1.1层叠性 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则&#xff1a; 1.样式冲突&#xff0c;遵循的原则是就近原则&#xff0c;哪个样式离结构近&a…

项目中配置多个阿里巴巴矢量图库方案

1、登录阿里巴巴矢量图库选择需要的图标库进行配置、并下载&#xff0c;如下&#xff1a; 按照以下3张图的步骤进行操作&#xff0c;并下载图标库&#xff1a; 2、代码中将图标库引入之后修改 iconfont.css 和 iconfont.json 两个文件&#xff0c;如下&#xff1a; iconfont.c…

2.6 IDE(集成开发环境)是什么

IDE&#xff08;集成开发环境&#xff09;是什么 IDE 是 Integrated Development Environment 的缩写&#xff0c;中文称为集成开发环境&#xff0c;用来表示辅助程序员开发的应用软件&#xff0c;是它们的一个总称。 通过前面章节的学习我们知道&#xff0c;运行 C 语言&…

YOLOv5全网独家改进: 红外小目标 | 注意力改进 | 多膨胀通道精炼(MDCR)模块,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:多膨胀通道精炼(MDCR)模块,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv5原创自研 https://b…