第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列

作者 : IT 大叔 本文共2424个字,预计阅读时间需要7分钟 发布时间: 2020-09-18

Django Web 初级起飞教程系列:

第1章:Django Web应用程序设置-Django 3…2…1…起飞!系列

第2章:Django基础-Django 3 ... 2 ... 1 ... 起飞系列

第3章:主页-Django 3 ... 2 ... 1 ... Takeoff!系列

第4章:列表页面-Django 3 ... 2 ... 1 ... Takeoff系列

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列

第6章:导航栏 - Django 3 ... 2 ... 1 ...起飞!系列

第7章:详细清单页面-Django 3 ... 2 ... 1 ... 起飞!系列

第8章:我的列表页面-Django 3 ... 2 ... 1 ... 起飞系列

第9章:编辑列表页面-Django 3 ... 2 ... 1 ... 起飞系列

现在已经显示了我们创建的所有列表,我们可以继续创建表格供用户输入自己的列表。

遵循与之前URL>表单>视图>模板相同的创建过程。如您所见,我们已经在创建页面的常规过程中添加了表单。我们需要注意这一额外步骤,因为我们需要用户填写的表格。

新上市网址路径

转到应用程序文件夹中的urls.py并添加新列表页面的路径。

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列插图

新上市表格

让我们在应用程序的文件夹中创建一个名为forms.py的文件。创建forms.py后,该应用程序的文件夹树应类似于以下屏幕截图。

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列插图(2)

打开forms.py,并添加以下代码。

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列插图(4)

Django导入表格

Django为我们提供了一个名为表格的模块。通过向我们提供ModelForm类,该模块允许创建表单。

从.models导入列表

我们将从清单模型创建表单。这就是为什么在这里导入它的原因,因为我们需要此模型中的数据。

元类

我们使用Meta类来配置与模型(清单)相关的表单。

表单的字段已指定,如上面的列表所示;请注意,我们没有包括地址字段,因为此信息对于在线显示有些敏感。

新列表视图

打开views.py并添加以下代码。

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列插图(6)

让我们描述一下代码中正在发生的事情。乍一看,您会看到我们定义了函数,并使用了if和else语句来呈现表单并允许用户提交数据。

如果request.method!='POST':
form = form_name()

由于我们正在提交要处理的数据,因此我们使用POST请求。但是,在这段代码中,我们说的是,如果request.method不等于POST,则呈现一个空表格。

用这种方式编写表单的原因是,为了首先访问表单,用户将始终始终首先从服务器请求数据。当您访问表单所在的页面时,实际上是在请求服务器向您显示该页面,这就是GET请求。

否则:
form = ListingForm(request.POST,request.FILES)
如果form.is_valid():
form.save()
返回redirect('listings:all_listings')

一旦他们填写并提交,用户面前便有一个空表格。这是将运行的代码。这里有很多要解压的东西,所以让我们进一步分解。

形式= ListingForm(request.POST,request.FILES)

我们创建一个变量表单,该表单将保存用户提交的数据。我们有request.POST来处理数据,但我们也需要request.FILES,因为我们也有文件,在这种情况下,图像文件正在提交。

如果form.is_valid():

该语句帮助我们使用is_valid()方法检查表单中的信息是否有效。此方法检查许多事情,例如是否填写了所有必填字段,字段的最大长度,数据匹配字段类型等等。

form.save()

如果if语句被证明是正确的,那么只有我们使用save()将数据从表单写入数据库

返回重定向('listings:all_listings')

这是不言自明的。在检查并提交了表单中的所有信息之后,我们将继续将用户重定向到发布所有列表的主页。如果愿意,可以将用户重定向到任何其他页面。

context = {'form':form}
return render(request,'listings / new_listing.html',context)

我们仍然需要将数据存储在form变量中。我们在new_listing模板中需要此数据,以便我们可以显示表单。我们将表单变量存储在字典中,然后将其传递给new_listing模板,此模板将在此步骤之后创建,以便正确呈现表单。

新上市模板

最后一步是在模板中呈现表单。继续并在templates文件夹中创建一个模板。我已将其命名为new_listing.html,但请随时选择自己的名字。

打开new_listing.html并添加以下代码。

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列插图(8)

该模板与我们到目前为止创建的模板不同,因此让我们对其进行分解。

表单action =“%url'listings:new_listing'%” method ='post'enctype =“ multipart / form-data”

action参数将数据发送到视图函数new_listing的URL。视图是将在其中处理数据的位置。方法参数定义了我们要提交的请求类型,在本例中为POST。我们还需要enctype =“ multipart / form-data”,因为我们正在发送图像文件。如果我们不包括它,则request.FILES将为空。如果仅提交数据,则不需要enctype。

csrf_token

跨站点请求伪造(csrf)令牌是一种安全措施,任何POST表单都需要包含该措施。

form.as_p

内置模板标签表单已经负责显示表单的标签和输入字段。我们向表单添加了as_p,以显示包装在段落标签中的表单字段。

发出python manage.py runserver命令,然后转到http://127.0.0.1:8000/new_listing/查看表格。

第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列插图(10)

如果看不到表格,请重新阅读本章并修复可能存在的所有错误。通过创建更多列表来试用该表单。提交表单后,应将您重定向到列表页面,您可以在其中看到所添加的新列表。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 第5章:新列表页-Django 3 ... 2 ... 1 ...起飞!系列

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论