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

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

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

  1. Python 项目实践三(Web应用程序)第一篇

    一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样.Python提供了一组开发Web应用程序的卓越工具.在本章中,你将学习如何使用D ...

  2. Python 项目实践二(生成数据)第二篇

    接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...

  3. idea自动构建web项目_构建Web应用程序以自动执行系统管理员任务

    idea自动构建web项目 系统管理员(sysadmin)每年在重复性任务上浪费数千小时. 幸运的是,使用开源工具构建的Web应用程序可以自动消除很大一部分痛苦. 例如,使用Python和JavaSc ...

  4. Python项目实践之二:下载数据(CSV和JSON )

    Python项目实践之二:下载数据(CSV和JSON ) 下载数据的可视化着重点在于从网上下载数据进行分析后,进行可视化处理,网上的数据格式多的难以置信,且大多未经过仔细检查,如果能够对这些数据进行分 ...

  5. Python项目实践之三:添加 Play 按钮和提高游戏等级

    Python项目实践之三:添加 Play 按钮和提高游戏等级 现在外星人入侵游戏项目已经实现了武装飞船和外星人群的功能,本章主要添加一些辅助功能,如添加一个开始按钮,计分板信息和随着游戏的进行加快游戏 ...

  6. 【使用Blazor构建web应用程序 .NET 6篇 中】

    Build web applications with Blazor 使用Blazor构建web应用程序 .NET 6篇 中 使用Blazor构建web应用程序 第五节Exercise - Acces ...

  7. [HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API

    介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3. 本篇是HTML5介绍的第三篇,主要介绍HTML5的Canvas API. ...

  8. 【使用Blazor构建web应用程序 .NET 6篇 上】

    Build web applications with Blazor 使用Blazor构建web应用程序 .NET 6篇 上 使用Blazor构建web应用程序 第一节Introduction (介绍 ...

  9. python项目实践_python实践项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...

最新文章

  1. Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一
  2. ads无法启用状态服务器,NAC ADSSO 无法工作在Microsoft 2008服务器版本
  3. python scikit learn 封装_python的scikit-learn的主要模块和基本使用
  4. linux系统安装arcsde,Linux操作系统安装ArcSDE10
  5. linux脚本安装gcc,在Linux系统下不需要编译安装GCC9,有仓库安装模板脚本
  6. vscode比较整个文件夹_vscode开发ROS1(5)-ROS工程目录结构
  7. (办公)eclipse连接github cannot open git-upload-pack(git-receive-pack)
  8. 下单送奖励金的实现思路
  9. Apache Hadoop 项目介绍
  10. 论文笔记_CV_AD_3D Reconstruction using a Sparse Laser Scanner and a Single Camera for Outdoor Autonomous
  11. 移动终端的应用杀掉进程后,接收消息启动应用的简要技术说明
  12. visio_连接线样式设置:如箭头线
  13. 第六届中国多式联运合作与发展大会暨多式联运示范成果展在京举办
  14. Java HotSpot(TM) 64-Bit Server VM warning:
  15. 桌面任务栏美化的五种方法(附很好用的美化工具大全网站)
  16. highcharts制作3D饼图渐变效果
  17. typec耳机知识介绍
  18. poj 1125 Stockbroker(多源最短路径)
  19. Android:禁止APP录屏和截屏
  20. 玩转基因组浏览器之利用IGV查找motif结合位点

热门文章

  1. eclipse中文乱码解决_解决git status显示中文文件名乱码问题
  2. php fopen插入文本_PHP 文件创建/写入
  3. @PostConstruct注解学习,最详细的分享教程
  4. mysql -- MAC下安装配置mysql
  5. docker 搭建nginx php mysql_Docker搭建PHP/Nginx/MySQL/Composer环境
  6. Qt QObject::connect: Parentheses expected错误原因
  7. php $start_date-sub(,PHP DateTime类常用方法总结
  8. Linux文件编程(2)
  9. python正则去除换行符,关于python:用于删除换行符的正则表达式
  10. IntelliJ IDEA 刷题利器 LeetCode 插件