关于“Python”的核心知识点整理大全57

目录

3. 模板edit_entry

edit_entry.html

4. 链接到页面edit_entry

topic.html

19.2 创建用户账户

19.2.1 应用程序 users

1. 将应用程序users添加到settings.py中

settings.py

2. 包含应用程序users的URL

urls.py

19.2.2 登录页面

urls.py

1. 模板login.html

login.html

2. 链接到登录页面

base.html

3. 使用登录页面

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


 

from django.shortcuts import render
--snip--
from .models import Topic, Entry
from .forms import TopicForm, EntryForm
--snip--
def edit_entry(request, entry_id):
 """编辑既有条目"""
1 entry = Entry.objects.get(id=entry_id)
topic = entry.topic
 if request.method != 'POST':
 # 初次请求,使用当前条目填充表单
2 form = EntryForm(instance=entry)
 else:
 # POST提交的数据,对数据进行处理
3 form = EntryForm(instance=entry, data=request.POST)
 if form.is_valid():
4 form.save()
5 return HttpResponseRedirect(reverse('learning_logs:topic',
 args=[topic.id]))
 context = {'entry': entry, 'topic': topic, 'form': form}
 return render(request, 'learning_logs/edit_entry.html', context)

我们首先需要导入模型Entry。在1处,我们获取用户要修改的条目对象,以及与该条目相 关联的主题。在请求方法为GET时将执行的if代码块中,我们使用实参instance=entry创建一个 EntryForm实例(见2)。这个实参让Django创建一个表单,并使用既有条目对象中的信息填充它。 用户将看到既有的数据,并能够编辑它们。

处理POST请求时,我们传递实参instance=entry和data=request.POST(见3),让Django根 据既有条目对象创建一个表单实例,并根据request.POST中的相关数据对其进行修改。然后,我 们检查表单是否有效,如果有效,就调用save(),且不指定任何实参(见4)。接下来,我们重 定向到显示条目所属主题的页面(见5),用户将在其中看到其编辑的条目的新版本。

3. 模板edit_entry

下面是模板edit_entry.html,它与模板new_entry.html类似:

edit_entry.html
{% extends "learning_logs/base.html" %}
{% block content %}
 <p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>
 <p>Edit entry:</p>
1 <form action="{% url 'learning_logs:edit_entry' entry.id %}" method='post'>
 {% csrf_token %}
 {{ form.as_p }}
2 <button name="submit">save changes</button>
 </form>
{% endblock content %}

在1处,实参action将表单发回给函数edit_entry()进行处理。在标签{% url %}中,我们将 条目ID作为一个实参,让视图对象能够修改正确的条目对象。我们将提交按钮命名为save changes,以提醒用户:单击该按钮将保存所做的编辑,而不是创建一个新条目(见2)。

4. 链接到页面edit_entry

现在,在显示特定主题的页面中,需要给每个条目添加到页面edit_entry的链接:

topic.html
--snip--
 {% for entry in entries %}
 <li>
 <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
 <p>{{ entry.text|linebreaks }}</p>
 <p>
 <a href="{% url 'learning_logs:edit_entry' entry.id %}">edit entry</a>
 </p>
 </li>
--snip--

我们将编辑链接放在每个条目的日期和文本后面。在循环中,我们使用模板标签{% url %} 根据URL模式edit_entry和当前条目的ID属性(entry.id)来确定URL。链接文本为"edit entry", 它出现在页面中每个条目的后面。图19-3显示了包含这些链接时,显示特定主题的页面是什么 样的。

至此,“学习笔记”已具备了需要的大部分功能。用户可添加主题和条目,还可根据需要查 看任何一组条目。在下一节,我们将实现一个用户注册系统,让任何人都可向“学习笔记”申请 账户,并创建自己的主题和条目。

19.2 创建用户账户

在这一节,我们将建立一个用户注册和身份验证系统,让用户能够注册账户,进而登录和注销。我们将创建一个新的应用程序,其中包含与处理用户账户相关的所有功能。我们还将对模型 Topic稍做修改,让每个主题都归属于特定用户。

19.2.1 应用程序 users

我们首先使用命令startapp来创建一个名为users的应用程序:

(ll_env)learning_log$ python manage.py startapp users
(ll_env)learning_log$ ls
1 db.sqlite3 learning_log learning_logs ll_env manage.py users
(ll_env)learning_log$ ls users
2 admin.py __init__.py migrations models.py tests.py views.py

这个命令新建一个名为users的目录(见1),其结构与应用程序learning_logs相同(见2)。

1. 将应用程序users添加到settings.py中

在settings.py中,我们需要将这个新的应用程序添加到INSTALLED_APPS中,如下所示:

settings.py
--snip--
INSTALLED_APPS = (
 --snip--
 # 我的应用程序
 'learning_logs',
 'users',
)
--snip-- 

这样,Django将把应用程序users包含到项目中。

2. 包含应用程序users的URL

接下来,我们需要修改项目根目录中的urls.py,使其包含我们将为应用程序users定义的URL:

urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
 url(r'^admin/', include(admin.site.urls)),
 url(r'^users/', include('users.urls', namespace='users')),
 url(r'', include('learning_logs.urls', namespace='learning_logs')),
] 

我们添加了一行代码,以包含应用程序users中的文件urls.py。这行代码与任何以单词users 打头的URL(如http://localhost:8000/users/login/)都匹配。我们还创建了命名空间'users',以便 将应用程序learning_logs的URL同应用程序users的URL区分开来。

19.2.2 登录页面

我们首先来实现登录页面的功能。为此,我们将使用Django提供的默认登录视图,因此URL 模式会稍有不同。在目录learning_log/users/中,新建一个名为urls.py的文件,并在其中添加如下 代码:

urls.py
"""为应用程序users定义URL模式"""
from django.conf.urls import url
1 from django.contrib.auth.views import login
from . import views
urlpatterns = [
 # 登录页面
2 url(r'^login/$', login, {'template_name': 'users/login.html'},
 name='login'),
] 

我们首先导入了默认视图login(见1)。登录页面的URL模式与URL http://localhost:8000/ users/login/匹配(见2)。这个URL中的单词users让Django在users/urls.py中查找,而单词login让 它将请求发送给Django默认视图login(请注意,视图实参为login,而不是views.login)。鉴于 我们没有编写自己的视图函数,我们传递了一个字典,告诉Django去哪里查找我们将编写的模板。 这个模板包含在应用程序users而不是learning_logs中。

1. 模板login.html

用户请求登录页面时,Django将使用其默认视图login,但我们依然需要为这个页面提供模 板。为此,在目录learning_log/users/中,创建一个名为templates的目录,并在其中创建一个名为 users的目录。以下是模板login.html,你应将其存储到目录learning_log/users/templates/users/中:

login.html
{% extends "learning_logs/base.html" %}
{% block content %}
1 {% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
2 <form method="post" action="{% url 'users:login' %}">
{% csrf_token %}
3 {{ form.as_p }}
4 <button name="submit">log in</button>
5 <input type="hidden" name="next" value="{% url 'learning_logs:index' %}" />
 </form> 
{% endblock content %} 

这个模板继承了base.html,旨在确保登录页面的外观与网站的其他页面相同。请注意,一个 应用程序中的模板可继承另一个应用程序中的模板。

如果表单的errors属性被设置,我们就显示一条错误消息(见1),指出输入的用户名—密码 对与数据库中存储的任何用户名—密码对都不匹配。

我们要让登录视图处理表单,因此将实参action设置为登录页面的URL(见2)。登录视图 将一个表单发送给模板,在模板中,我们显示这个表单(见3)并添加一个提交按钮(见4)。 在5处,我们包含了一个隐藏的表单元素——'next',其中的实参value告诉Django在用户成功登 录后将其重定向到什么地方——在这里是主页。

2. 链接到登录页面

下面在base.html中添加到登录页面的链接,让所有页面都包含它。用户已登录时,我们不想 显示这个链接,因此将它嵌套在一个{% if %}标签中:

base.html
<p>
 <a href="{% url 'learning_logs:index' %}">Learning Log</a> -
 <a href="{% url 'learning_logs:topics' %}">Topics</a> -
1 {% if user.is_authenticated %}
2 Hello, {{ user.username }}.
{% else %}
3 <a href="{% url 'users:login' %}">log in</a>
{% endif %}
</p>
{% block content %}{% endblock content %} 

在Django身份验证系统中,每个模板都可使用变量user,这个变量有一个is_authenticated 属性:如果用户已登录,该属性将为True,否则为False。这让你能够向已通过身份验证的用户 显示一条消息,而向未通过身份验证的用户显示另一条消息。

在这里,我们向已登录的用户显示一条问候语(见1)。对于已通过身份验证的用户,还设 置了属性username,我们使用这个属性来个性化问候语,让用户知道他已登录(见2)。在3处, 对于还未通过身份验证的用户,我们再显示一个到登录页面的链接。

3. 使用登录页面

前面建立了一个用户账户,下面来登录一下,看看登录页面是否管用。请访问 http://localhost:8000/admin/,如果你依然是以管理员的身份登录的,请在页眉上找到注销链接并 单击它。

注销后,访问http://localhost:8000/users/login/,你将看到类似于图19-4所示的登录页面。输入 你在前面设置的用户名和密码,将进入页面index。。在这个主页的页眉中,显示了一条个性化问 候语,其中包含你的用户名。


关于“Python”的核心知识点整理大全37-CSDN博客

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

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

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

相关文章

Git原理与使用(二):分支管理

Git原理与使用[二]:分支管理 一.分支的基本操作1.理解分支2.创建分支3.切换分支4.删除分支5.补充:创建并切换分支 二.合并分支1.合并分支的基础操作2.分支冲突 三.分支管理策略1.Fast-forward模式2.--no--ff(即:禁用Fast-forward模式)3.分支策略 四.创建临时分支修复bug1.git s…

NSSCTF 1zjs

开启环境: 搞就完事了,别玩魔法! 源码打开 点击访问:./dist/index.umd.js" 搜索php,找到23条相关的,注意到有一个特别的信息: PERFORMANCE OF THIS SOFTWARE.Your gift just take it : /fk3f1ag.php 访问: node4.anna.nssctf.cn:28325/fk3f1ag.php 得到这样: ([![]…

【Java 21 新特性】顺序集合(Sequenced Collections)

1 摘要 引入新的接口表示具有定义的遇到顺序的集合。每个这样的集合都有一个明确定义的第一个元素、第二个元素&#xff0c;依此类推&#xff0c;直到最后一个元素。提供统一的API来访问它的第一个和最后一个元素&#xff0c;并以相反的顺序处理它的元素。 "生活只能向后…

【算法与数据结构】968、LeetCode监控二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题的一共有两个难点&#xff0c;一个在于如何遍历二叉树&#xff08;前中后遍历&#xff0c;选择什么…

MySQL 时间日期函数,流程控制函数,加密解密函数以及聚合查询函数

注:本文仅作为查找函数和部分理解使用,希望能给大家带来帮助 以下函数均可以使用 SELECT NOW()等函数 FROM DUAL;来测试 //其中dual是一个准们用来测试的测试表 1.时间日期函数 1.1 获取时间的函数 重点记忆前三个红色标注的函数, 第一个函数返回值如2024-01-02的形式 第二个如…

如何使用curl在PHP中同时上传文件和其他数据?

问CHAT&#xff1a;举个例子说明如何使用curl在PHP中同时上传文件和其他数据&#xff1f; CHAT回复&#xff1a;以下例子为&#xff1a; php <?php $url http://www.example.com/path/; $filename path/to/your/file.png; $fields array( fieldParam1 > someValue, …

C++摸版(初阶)----函数模版与类模版

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

Mac环境下反编译apk

Mac环境下反编译apk 安装反编译工具dex2jar&#xff1a;[官网下载](https://sourceforge.net/projects/dex2jar/)JD-GUI&#xff1a;[官网下载](https://jd-gui.apponic.com/) 实操1. 将需要反编译的 .apk 文件放在下载的 dex2jar 文件夹目录下2. 使用 cd /xxx/dex2jar-2.0 命令…

深度生成模型之GAN的评估 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN的评估图像翻译的应用1. 风格迁移2. 数据增强3. 经典图像任务4. 内容创作5. 人脸图像编辑6. 人体图像编辑 图像翻译模型1. 有监督图像翻译模型2. 无监督图像翻译模型3. 多域图像翻译模型 深度生成模型之GAN的评估 图像翻译的应用 1. 风格迁移 各类…

120基于matlab的LMS自适应滤波算法

基于matlab的LMS自适应滤波算法&#xff0c;如、解相关LMS算法&#xff0c;滤波型LMS算法&#xff0c;变换域LMS算法&#xff0c;输出滤波前后及学习曲线图。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 120自适应滤波算法变换域LMS算法 (xiaohongshu.com…

k8s的陈述式管理

k8s的陈述式管理&#xff1a; 所谓的陈述式管离也就是命令行工具 优点&#xff1a;90%以上都可以满足 对资源的增删查比较方便&#xff0c;对改不是很友好 缺点&#xff1a;命令比较冗长&#xff0c;复杂&#xff0c;难记 声明式&#xff1a; k8s当中的YAML文件来实现资源管…

测试要不要写测试用例(多方面剖析)

前言 最近在网上看到关于这样的一个话题“测试需要写测试用例吗&#xff1f;”&#xff0c;引起了很多同学的讨论。这段话是这样的&#xff1a; 测试用例主要作用&#xff1a;有效地评估软件的质量&#xff0c;测试用例质量体现了测试的质量。 下面摘取一部分同学的观点&…

对比开源大语言模型的自然语言生成SQL能力

背景 NL-to-SQL&#xff08;自然语言到结构化查询语言&#xff09;任务是自然语言处理&#xff08;NLP&#xff09;领域的一个难题。 它涉及将自然语言问题转换为 SQL 查询&#xff0c;然后可以针对关系数据库执行该查询来回答问题。 该任务是 NLP 中的一个专门子领域&#xf…

Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…

SQL 在已有表中修改列名的方法

文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question&#xff1a; 假设有一张表 StudentInfo&#xff0c;表中有一个列名是 Student_Name &#xff0c;想要把这个列名改成 StudentName 应该如何操作&#xff1f; 建表语句如下&#xff1a; --建表 if object_id(S…

Java-网络爬虫(一)

文章目录 前言一、网络爬虫1. 介绍2. 爬虫协议3. 法律法规 二、相关知识1. HttpClient2. Jsoup 三、综合案例1. 案例一2. 案例二 四、总结 前言 在大数据时代&#xff0c;信息采集是一项重要的工作&#xff0c;而互联网中的数据是海量的&#xff0c;如果单纯靠人力进行信息获取…

MATLAB习题操作实战

2.1创建一个有7个元素的一维数组&#xff0c;并做如下处理:直接寻访一维数组的第6个元素;寻访一维数组的第1、3、5个元素;寻访一维数组中第4个至最后1个元素;寻访一维数组中大于70的元素。 % 创建一维数组 array [50, 60, 70, 80, 90, 100, 110];% 直接寻访一维数组的第6个元…

【自动驾驶中的SLAM技术】第2讲:基础数学知识回顾

第二讲&#xff1a;基础数学回顾 文章目录 第二讲&#xff1a;基础数学回顾1 几何学1.1 坐标系1.2 坐标变换① 空间向量② 基变换③ 坐标变换④ 总结 1.3 四元数与旋转向量 2 运动学2.1 李群视角2.2 四元数视角2.3 四元数的李代数与旋转向量间的转换2.4 SO(3)t 上的运动学2.5 线…

六、HTML 段落

HTML 可以将文档分割为若干段落。 一、HTML 段落 段落是通过 <p> 标签定义的。 <p>这是一个段落 </p> <p>这是另一个段落</p> 注意&#xff1a;浏览器会自动地在段落的前后添加空行。&#xff08;</p> 是块级元素&#xff09; 二、不…

算法巡练day03Leetcode203移除链表元素707设计链表206反转链表

今日学习的文章视频链接 https://www.bilibili.com/video/BV1nB4y1i7eL/?vd_source8272bd48fee17396a4a1746c256ab0ae https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 链表理论基础 见我的博…