Python 项目实践三(Web应用程序)第四篇

接着上节继续学习,本章将建立用户账户

Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方。在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目。你还将学习Django如何防范对基于表单的网页发起的常见攻击,这让你无需花太多时间考虑确保应用程序安全的问题。

一 让用户能够输入数据

建立用于创建用户账户的身份验证系统之前,我们先来添加几个页面,让用户能够输入数据。我们将让用户能够添加新主题、添加新条目以及编辑既有条目。

1.1 用于添加主题的表单

让用户输入并提交信息的页面都是表单,那怕它看起来不像表单。用户输入信息时,我们需要进行验证,确认提供的信息是正确的数据类型,且不是恶意的信息,如中断服务器的代码。然后,我们再对这些有效信息进行处理,并将其保存到数据库的合适地方。这些工作很多都是由Django自动完成的。

在Django中,创建表单的最简单方式是使用ModelForm,它根据前面的模型中的信息自动创建表单。创建一个名为forms.py的文件,将其存储到models.py所在的目录中,并在其中编写你的第一个表单:

from django import formsfrom .models import Topicclass TopicForm(forms.ModelForm):class Meta:model = Topicfields=['text']labels={'text':''}

1.2URL模式new_topic

#定义learning_logs的URL模式from django.conf.urls import urlfrom . import viewsapp_name='learning_logs'
urlpatterns=[#主页url(r'^$',views.index,name='index'),#显示所有主题,url(r'^topics/$',views.topics,name='topics'),#特定主题的详细页面url(r'^topics/(?P<topic_id>\d+)',views.topic,name='topic'),#用于添加新主题的网页url(r'^new_topic/$',views.new_topic,name='new_topic'),]

1.3 视图函数new_topic()

函数new_topic()需要处理两种情形:刚进入new_topic网页(在这种情况下,它应显示一个空表单);对提交的表单数据进行处理,并将用户重定向到网页topics:

from django.shortcuts import renderfrom django.http import HttpResponseRedirect
from django.urls import reverse_lazyfrom .forms import TopicForm
from .models import Topic# Create your views here.
def index(request):'''学习笔记的主页'''return render(request,'learning_logs/index.html')def topics(request):topics = Topic.objects.order_by('date_added')context = {'topics': topics}return render(request, 'learning_logs/topics.html', context)def topic(request,topic_id):'''显示单个主题以及所有的条目'''topic=Topic.objects.get(id=topic_id)entries=topic.entry_set.order_by('-date_added')context = {'topic':topic,'entries':entries}return render(request, 'learning_logs/topic.html', context)def new_topic(request):'''添加新主题'''if request.method !='POST':#未提交数据:创建一个新表单form = TopicForm()else :#POST提交的数据,对数据进行处理form = TopicForm(request.POST)if form.is_valid():form.save()return HttpResponseRedirect(reverse('learning_logs:topics'))context = {'form':form}return render(request,'learning_logs/new_topic.html',context)

1.4 模板new_topic

{% extends "learning_logs/base.html" %}
{% block content %}
<p>Add a new topic:</p><form action="{% url 'learning_logs:new_topic' %}" method='post'>{% csrf_token %}{{ form.as_p }}<button name="submit">add topic</button>
</form>
{% endblock content %}

1.5 链接到页面new_topic

{% extends "learning_logs/base.html" %}
{% block content %}
<p>Topics</p>
<ul>{% for topic in topics %}<li><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></li>{% empty %}<li>No topics have been added yet.</li>{% endfor %}
</ul>
<a href="{% url 'learning_logs:new_topic' %}">Add a new topic:</a>
{% endblock content %}

最后的结果如下图:

 

2 添加新条目

现在用户可以添加新主题了,但他们还想添加新条目。我们将再次定义URL,编写视图函数和模板,并链接到添加新条目的网页。效果如下图:

3 编辑条目

过程和上面的差不多,这里就不在详细说了,效果如下:

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

 未完待续

 

转载于:https://www.cnblogs.com/ChinacloudTech/p/8205442.html

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

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

相关文章

新手想买二手车 先看看买车后这五个步骤吧

买二手车你该知道 很多人因为资金短缺又或者是想要一辆便宜车“练手”而选择去买一辆价格低廉&#xff0c;有着一定车龄的二手车。很多人看中二手车正正是因为便宜&#xff0c;以为是购买以后基本不需要再投入新的花费&#xff0c;殊不知这是非常错误的想法&#xff0c;因为以下…

yii---where or该如何使用

今天调试YII项目的时候&#xff0c;遇到一个奇葩的事儿&#xff0c;在调试 where or 查询的时候&#xff1a;调试语句是这样&#xff1a; $str static::find()->where([or,username > $username,mobile > $account]); echo "<br>"; echo $st…

十六进制编辑器--ImHex

十六进制编辑器是用于编辑单个字节数据的软件应用程序&#xff0c;主要由程序员或系统管理员使用。常规文本编辑器和十六进制编辑器之间的区别在于常规编辑器表示文件的逻辑内容&#xff0c;而十六进制编辑器表示文件的物理内容。十六进制编辑器可以让你以十六进制的形式查看或…

计算机第一课 教案 纪律,信息技术开学第一课-纪律

《信息技术开学第一课-纪律》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《信息技术开学第一课-纪律(3页珍藏版)》请在人人文库网上搜索。1、信息技术开学第一课教学目标&#xff1a;1、 了解学生的基础情况&#xff0c;选出课代表2、 分好学习小组&#xff0c;选出…

奥迪坚SVRM(Screen-Voice Recording Manager)录屏软件正式发布

奥迪坚SVRM(Screen-Voice Recording Manager)能够对座席通话同步录音的同时进行座席操作录屏 实时监控座席屏幕操作&#xff0c;及时纠正操作问题。 座席质检可以边听边看&#xff0c;为KPI考核提供依据。 利用优秀座席操作记录对座席进行培训。 监控坐席人员对敏感信息访问次数…

小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向

今天上午&#xff0c;第一届小米开源技术峰会在北京举行&#xff0c;会上&#xff0c;小米人工智能与云平台副总裁崔宝秋致开场词&#xff0c;并发表了《小米开源之路》的演讲。 崔宝秋强调小米一直在推动开源&#xff0c;也是开源的倡导者。他告诉我们雷军创立小米的其中一个重…

容器基本操作

docker run --namefang -it image_id /bin/bash 执行的shell docker ps -a 查看所有容器&#xff0c; -l 查看最近运行容器 docker inspect 查看容器的详细信息 docker start [-i] container_id 或者名字也可以 docker rm 删除容器docker ps 查看正在运行的容器do…

计算机及相关设备制造业2020,在现实生活中,接近完全垄断市场类型的行业包括()。A.计算机及相关设备制造业B.稀有...

在现实生活中&#xff0c;接近完全垄断市场类型的行业包括()。A&#xff0e;计算机及相关设备制造业B&#xff0e;稀有更多相关问题【简答题】请解释以下名词: 制动、缓解、实施制动作用、实施缓解作用、制动距离。【简答题】请解释以下名词: 制动、缓解、实施制动作用、实施缓…

CAS原理

像synchronized这种独占锁属于悲观锁&#xff0c;它是在假设一定会发生冲突的&#xff0c;那么加锁恰好有用&#xff0c;除此之外&#xff0c;还有乐观锁&#xff0c;乐观锁的含义就是假设没有发生冲突&#xff0c;那么我正好可以进行某项操作&#xff0c;如果要是发生冲突呢&a…

数据分析师的职业规划之路

“数据分析师作为一个出现时间不长的工种&#xff0c;大数据时代下&#xff0c;成为螺丝钉还是成为龙头&#xff0c;需要尝试新的可能。” 数据分析师手中拥有一座宝藏。作为滴滴出行数据分析团队的负责人&#xff0c;刘普成发现了数据分析师通往卓越的秘诀&#xff1a;视野。数…

《设计模式》3.结构型模式

点击进入我的博客 3.1 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口&#xff0c;使得原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 3.1.1 类的适配器结构 目标&#xff08;Target&#xff09;角色&#xff1a;这就是所期待得到的接口&…

最快的计算机操作,世界十大最快的超级计算机

最近&#xff0c;《联邦储备技术》杂志对全球超级计算机进行了排名&#xff0c;并从中选出了十个最快的超级计算机. 其中&#xff0c;中国有两台超级计算机进入了榜单&#xff0c;而“天河2号”则依靠双精度浮点算术峰. 速度达到了每秒5490亿次&#xff0c;占据了王位.这也是两…

苹果iOS 10.3.1修复博通Wi-Fi芯片重大安全漏洞

如果你还没有将设备升级到 iOS 10.3.1 的话&#xff0c;那么现在是个机会了。因为不久前发布的 iOS 10.3.1&#xff0c;修复了 iPhone 中博通 Wi-Fi 芯片的一个重大安全漏洞&#xff0c;该安全漏洞可能会使在 Wi-Fi 范围内的攻击者在智能手机上注入并运行代码。 Google Project…

计算机开机跳过硬盘检查,如何设置开机跳过检测硬盘

如何设置开机跳过检测硬盘导读&#xff1a;很多win用户都想设置开机跳过检测硬盘&#xff0c;能够更加快速的进入系统&#xff0c;今天百分网小编给大家整理出了方法。1、系统的问题系统解决在Windows界面下&#xff0c;通过“磁盘碎片整理”程序来完成。首先启动“CMD”键入“…

CLIENT系列、OFFSET系列、SCROLL系列

一、client系列 clientWidth/clientHeight 是我们设置的宽和高加上内边距&#xff08;没有边框&#xff09; clientLeft/clientTop  就是我们设置的边框值 二、offset系列 offsetWidth/offsetHeight  是我们设置的宽和高加上内边距&#xff0c;加上边框 offsetLeft/offs…

台积电放大招:甩开英特尔 7nm和5nm芯片将诞生

北京时间1月20日消息&#xff0c;据科技网站AppleInsider报道&#xff0c;近几年来台积电的发展势头相当猛&#xff0c;该公司总裁兼联合CEO刘德音(Mark Liu)在最近的投资者会议中表示&#xff0c;预计今年年末公司就将正式量产10nm晶圆。此外&#xff0c;台积电7nm研发一如预期…

01: 实现注册登录功能

目录&#xff1a;抽屉项目之js最佳实践 01: 实现注册登录功能 02: 实现发布帖子功能 03: 将帖子展示到页面、点赞 04: 层级评论 目录&#xff1a; 1.1 显示、隐藏 "登录/注册" 菜单1.2 注册功能1.3 登录功能1.4 获取当前用户数量1.1 显示、隐藏 "登录/注册"…

计算机系统怎么算页面大小,电脑网页的设计尺寸是多少

电脑网页的设计尺寸是多少刚入门的网页设计师可能对电脑网页的设计尺寸大小存在疑问&#xff0c;以下百分网小编整理的电脑网页的设计尺寸&#xff0c;希欢迎阅读!  对大于30W台客户端用户进行测试&#xff0c;得到的测试数据如下(数据来源于网络)&#xff1a;安全分辨率为10…

Array 的一些常用 API

unshift、push、shift、pop 这4个方法都会改变原数组unshift() 从前面添加元素&#xff0c;push() 从后面追加元素&#xff0c;返回数组长度shift() 删除第0个元素&#xff0c;pop() 删除最后一个元素&#xff0c;返回被删除的元素slice 不改变原数组slice(m, n)返回原数组索引…

Ovum观察:运营商通信PaaS发展趋势强劲

近日在佛罗里达州奥兰多市举行的Genband公司Perspectives16会议上&#xff0c;一个首要议题是在通信领域应对OTT威胁。 这场会议的主旨侧重于电信运营商和其他服务提供商如何应对日益严重的威胁&#xff0c;不过似乎这样的讨论有些晚了&#xff0c;因为许多大型运营商已经找到了…