博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 项目实践三(Web应用程序)第四篇
阅读量:5316 次
发布时间:2019-06-14

本文共 2912 字,大约阅读时间需要 9 分钟。

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

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

一 让用户能够输入数据

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

1.1 用于添加主题的表单

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

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

from django import formsfrom .models import Topicclass TopicForm(forms.ModelForm):	class Meta:		model = Topic		fields=['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
\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 HttpResponseRedirectfrom django.urls import reverse_lazyfrom .forms import TopicFormfrom .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 %}

Add a new topic:

{% csrf_token %} {
{ form.as_p }}
{% endblock content %}

1.5 链接到页面new_topic

{% extends "learning_logs/base.html" %}{% block content %}

Topics

    {% for topic in topics %}
  • {
    { topic }}
  • {% empty %}
  • No topics have been added yet.
  • {% endfor %}
Add a new topic:{% endblock content %}

最后的结果如下图:

 

2 添加新条目

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

3 编辑条目

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

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

 未完待续

 

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

你可能感兴趣的文章
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
大数据学习
查看>>
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
Objective-C 【关于导入类(@class 和 #import的区别)】
查看>>
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
【转】javascript 中的很多有用的东西
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
给C#学习者的建议 - CLR Via C# 读后感
查看>>
Recover Binary Search Tree
查看>>
Java 实践:生产者与消费者
查看>>
[转]IOCP--Socket IO模型终结篇
查看>>
(五)归一化
查看>>
hdu 4737 A Bit Fun 尺取法
查看>>
使用信号量
查看>>
《数据分析实战》--第三章 python实现
查看>>