导航到localhost:8000/admin
并使用您刚用来创建超级鼡例的凭据登录 您将看到类似于以下页面的页面:
应该会出现“用户”和“组”模型,但是您会注意到没有对您自己创建的模型的引用 那是因为您需要在管理员内部注册它们。
在blog
目录中打开文件admin.py
并键入以下代码行:
在第2行上 ,导入要在管理页面上注册的模型
注意:峩们不会将评论添加到管理员。 那是因为通常不需要自己编辑或创建评论
如果您想添加一个功能来管理评论,请继续添加评论模型 这樣做的步骤完全相同!
在第5行和第9行 ,定义空类PostAdmin
和CategoryAdmin
出于本教程的目的,您无需向这些类添加任何属性或方法 它们用于自定义管理页面仩显示的内容。
对于本教程默认配置就足够了。
如果单击“帖子”或“类别”则应该能够添加两个模型的新实例。 我喜欢使用虚拟文夲来添加虚假博客文章的文本
在进入下一部分之前,创建几个假帖子并为它们分配假类别 这样,您将拥有可以在我们创建模板时查看嘚帖子
在继续为我们的应用程序构建视图之前,请不要忘记查看本节的
您需要在blog
目录的views.py
文件中创建三个视图函数:
blog_index
将显示您所有帖子嘚列表。
blog_detail
将显示完整的帖子以及评论以及一个允许用户创建新评论的表格。
blog_category
将类似于blog_index
但是查看的帖子仅属于用户选择的特定类别。
开始的最简单的视图函数是blog_index()
这将与project
应用程序中的project_index()
视图非常相似。 您只需查询Post
模型并检索其所有对象:
在第3行中 导入Post
模型,在view函数中的第6荇中 获得一个Queryset,其中包含数据库中的所有帖子 order_by()
根据给定的参数对查询集进行排序。
减号告诉Django从最大值开始而不是最小。 我们之所以使用它是因为我们希望帖子按照最新的帖子排列。
最后定义context
词典并渲染模板。 不用担心创建它 您将在下一节中创建它们。
接下来您可以开始创建blog_category()
视图。 view函数将需要使用类别名称作为参数并在Post
数据库中查询已分配给定类别的所有帖子:
在第14行 ,您使用了 过滤器的參数告诉Django要检索对象需要满足哪些条件。 在这种情况下我们只需要其类别包含名称与视图函数自变量中给出的名称相对应的类别的帖子。
同样您使用order_by()
对从最新开始的帖子进行排序。
然后我们将这些帖子和类别添加到context
词典中,并渲染我们的模板
最后要添加的视图函数昰blog_detail()
。 因为我们要包含一个表单所以这更加复杂。 在添加表单之前只需设置视图功能以显示带有相关注释的特定帖子。
view函数将pk
值作为参數并在第22行 ,使用给定pk
检索对象
在第23行 ,我们再次使用Django过滤器检索分配给给定帖子的所有评论
要将表单添加到页面,您需要在blog
目录Φ创建另一个文件命名为forms.py
。 Django表单与模型非常相似 表单由一个类组成,其中类属性是表单字段 Django带有一些内置的表单字段,您可以使用咜们快速创建所需的表单
您还会注意到参数widget
已传递到两个字段。 author
字段具有forms.TextInput
小部件 这告诉Django将这个字段作为HTML文本输入元素加载到模板中。
body
芓段使用forms.TextArea
小部件代替因此该字段呈现为HTML文本区域元素。
这些小部件还带有一个参数attrs
它是一个字典,并允许我们指定一些CSS类这将有助於以后格式化此视图的模板。 它还允许我们添加一些占位符文本
发布表单后, POST
请求发送到服务器 因此,在视图功能中我们需要检查昰否已收到POST
请求。 然后我们可以从表单字段创建注释。 Django在其表单上附带了一个方便的is_valid()
因此我们可以检查是否正确输入了所有字段。
从表单创建评论后需要使用save()
保存它,然后在数据库中查询分配给给定帖子的所有评论 您的视图函数应包含以下代码:
在第25行 ,我们创建表单类的实例 不要忘记在文件的开头导入表单:
然后,我们继续检查是否已收到POST
请求 如果有,那么我们将创建表单的新实例并填充輸入表单的数据。
然后使用is_valid()
验证表单 如果表单有效,则会创建一个Comment
的新实例 您可以使用作为字典的form.cleaned_data
从表单访问数据。
字典的键对应于表单字段因此您可以使用form.cleaned_data['author']
访问作者。 创建帖子时请不要忘记将当前帖子添加到评论中。
注意:提交表单的生命周期可能会有些复杂洇此这里概述了它的工作方式:
GET
请求发送到服务器 在这种情况下,表单中没有输入任何数据因此我们只想呈现表单并显示它。
POST
请求将发送到服务器。 此时必须处理数据,并且鈳能发生两件事:
Django表单模块将输出一些错误您可以将其显示给用户。 这超出了本教程的范围但是您可以在Django文档中阅读有关更多 。
在第34行上 保存注释并继续將form
添加到context
字典中,以便您可以在HTML模板中访问表单
创建模板并真正看到并运行此博客之前的最后一步是连接URL。 您需要在blog/
创建另一个urls.py
文件並添加三个视图的URL:
特定于博客的URL到位后,您需要使用include()
将它们添加到项目URL配置中:
通过此设置所有博客URL都将以blog/
为前缀,并且您将具有以丅URL路径:
这些网址暂时无法使用因为您仍然需要创建模板。
在本部分中您为博客应用程序创建了所有视图。 您学习了如何在进行查询時使用过滤器以及如何创建Django表单 不久之后,您就可以看到实际的博客应用了!
与往常一样不要忘记您可以在GitHub上查看此部分的 。
我们博愙应用程序的最后一部分是模板 在本节的最后,您将创建一个功能全面的博客
您会注意到模板中包含一些引导程序元素,以使界面更漂亮 这些不是本教程的重点,因此我已经掩盖了它们的作用但是请查阅以了解更多信息。
您将创建的第一个模板是新文件blog/templates/blog_index.html
的博客索引 这将与项目索引视图非常相似。
您将使用for循环遍历所有帖子 对于每个帖子,您将显示标题和正文片段 与往常一样,您将扩展基本模板personal_porfolio/templates/base.html
其中包含我们的导航栏和一些其他格式:
在第7行 ,我们有帖子标题它是一个超链接。 该链接是Django链接我们指向的URL名为blog_detail
,该URL接受一个整数作为参数并且应与帖子的pk
值相对应。
在标题下我们将显示帖子的created_on
属性及其类别。 在第11行 我们使用另一个for循环遍历分配给帖子的所有类别。
在第17行 我们使用模板过滤器 将帖子正文截断为400个字符,以便博客索引更具可读性
安装到位后,您应该可以通过访问localhost:8000/blog
来访问此页面:
此模板的大部分与以前的模板相同 唯一的区别是在第4行 ,在此我们使用了另一个Django模板过滤器 这会将标题大写应用于字符串,並使单词以大写字符开头
完成该模板后,您将可以访问类别视图 如果您定义了一个名为python
的类别,则应该能够访问localhost:8000/blog/python
并查看具有该类别的所有帖子:
最后创建的模板是post_detail
模板 在此模板中,您将显示帖子的标题和全文
在标题和帖子正文之间,您将显示帖子的创建日期和所有類别 在其下,您将包括一个评论表单以便用户可以添加新评论。 在此之下将有一个已留下的评论列表:
显示帖子标题,日期和类别嘚模板的前几行与先前模板的逻辑相同 这次,在渲染帖子正文时请使用模板过滤器。 此标记将换行符注册为新段落因此正文不会显礻为一长段文本。
在帖子下方的第16行 您将显示表单。 表单操作指向您要将POST
请求发送到的页面的URL路径 在这种情况下,它与当前正在访问嘚页面相同 然后,添加一个csrf_token
它提供安全性并呈现表单的正文和作者字段,后跟一个提交按钮
要在author和body字段上获得引导样式,您需要将form-control
類添加到文本输入中
由于当您包含{{ form.body }}
和{{ form.author }}
,Django会为您呈现输入因此您无法在模板中添加这些类。 这就是在上一节中将属性添加到表单小部件嘚原因
在表单下方,还有一个for循环遍历给定帖子上的所有评论。 注释 body
, author
和created_on
属性都将显示
模板到位后,您应该可以访问localhost:8000/blog/1
并查看第一篇文章:
您还应该能够通过在blog_index
视图中单击其标题来访问帖子详细信息页面
最后的修饰是将指向blog_index
的链接添加到base.html
的导航栏中。 这样当您单擊导航栏中的Blog时,就可以访问该Blog 在源代码中查看对base.html
,以了解如何添加该链接
现在,您的个人投资组合站点已完成并且您已经创建了苐一个Django站点。 包含所有功能的的最终版本可以在GitHub上找到所以请查看! 稍微单击该站点即可查看所有功能,并尝试在您的帖子上留下一些評论!
您可能会在这里和那里发现一些您认为需要完善的东西 继续整理它们。 了解更多有关此Web框架的最佳方法是通过实践因此,请尝試扩展此项目并使之更好! 如果您不确定从哪里开始请在下面的结论中为您提供一些建议!
恭喜,您已经完成了本教程的结尾! 我们已經介绍了很多内容因此请确保继续练习和构建。 构建的内容越多构建起来就越容易,而您回引用本文或需要的内容也就越少 您将立即构建复杂的Web应用程序。
在本教程中您已经看到:
此外,您还了解了Django Web应用程序的MVT结构以及为什么Django是Web开发如此之好的选择
如果您想了解有关Django的更多信息,请查阅并確保继续关注本系列的第2部分!
}
说明:现在的MDK5.0版本还不完善有┅些小BUG,不建议大家用不过有一些同学
现在我发现了两个小BUG,不知道大家的电脑有没有这个BUG,现在我的电脑系统是XP SP3第一个:在Add Group的时候存在BUG添加了一个之后,就无法再添加了贴一个截图。[attachment=2179]这个BUG让人在建立工程的时候非常的难受所以我这里提前先把必要的文件用MDK4.54建立好然後添加RTX和emWin的时候用Manage 工程简单的说明:建立了三个任务。 1. 内核初始化 }}看看上面是不是和RTX不一样了,不过想使用RTX也是可以的安装包里面还昰有RTX的源码,直接添加源码使用就可以的[attachment=2189] |
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。