--- title: 评估:DIY Django 微博客 slug: learn/Server-side/Django/django_assessment_blog translation_of: Learn/Server-side/Django/django_assessment_blog ---
在这个评估中,您将使用您在 Django Web Framework (Python) 模块中获得的知识,来创建一个非常基本的博客。
先决条件: | 在尝试此评估之前,您应该已经完成了本模块中的所有文章。 |
---|---|
目标: | 测试对Django基础知识的理解,包括URL配置,模型,视图,表单和模板。 |
下面列出了需要显示的页面、URL和其它要求:
页面 | URL | 要求 |
---|---|---|
主页 | / and /blog/ |
描述站点的索引页面。 |
所有博客文章列表 | /blog/blogs/ |
所有博客文章列表:
|
博客作者(博主)详细信息页面 | /blog/blogger/<author-id> |
指定作者的信息(按ID)和他们的博客文章列表:
|
博客帖子详细信息页面 | /blog/<blog-id> |
博客帖子详情。
|
所有博主的名单 | /blog/bloggers/ |
系统上的博主列表:
|
评论表单页面 | /blog/<blog-id>/create |
为博客帖子创建评论:
|
用户认证页面 | /accounts/<standard urls> |
用于登录,注销和设置密码的标准Django身份验证页面:
|
管理站点 | /admin/<standard urls> |
应启用管理站点,以允许创建/编辑/删除博客帖子、博客作者、和博客评论(这是博客创建新博客帖子的机制):
|
此外,您应该编写一些基本测试来验证:
__str__()
返回预期值)。get_absolute_url()
返回预期的URL)。注意: 当然还有许多其他测试可以运行。请谨慎使用,但我们希望您至少进行上述测试。
以下部分,显示了实现上述要求的站点的屏幕截图。
以下屏幕截图,提供了完成的程序应输出的示例。
这将显示所有博客帖子的列表(可从侧栏中的“所有博客” All blogs 链接访问)。注意事项:
这提供了到所有博客的链接,如同来自侧栏中的“所有博客” All bloggers 链接。在这种情况下,我们可以从侧边栏看到,并没有用户登录。
这显示了指定博客的详细信息页面。
请注意,注释具有日期和时间,并且从最旧到最新排序(与博客次序相反)。最后,我们有一个链接,用于访问表单,以添加新评论。如果用户未登录,我们会看到登录的建议。
这是添加评论的表单。请注意,我们已登录。如果成功,我们应该返回相关的博客帖子页面。
这会显示博主的个人信息及其博客帖子列表。
以下部分,描述了您需要执行的操作。
该项目与 LocalLibrary 教程非常相似。您将能够使用几乎所有相同的方法,包含设置框架,用户登录/注销行为,对静态文件,视图,URL,表单,基本模板和管理站点配置的支持。
一些一般提示:
get_queryset(self)
来进行过滤(很像我们的图书馆类LoanedBooksAllListView
),并从URL获取作者信息。get_context_data()
(在下面讨论)。CreateView
,以创建添加注释表单。如果您使用CreateView
(推荐),那么:
get_context_data()
,如下所述)。 form_valid()
函数中,设置注释的作者,以便将其保存到模型中(如此处所述 - Django文档)。在同一个功能中,我们设置了相关的博客。可能的实现如下所示(pk
是从URL / URL配置传入的博客ID)。
def form_valid(self, form): """ Add author and associated blog to form data before setting it as valid (so it is saved to model) """ #Add logged-in user as author of comment form.instance.author = self.request.user #Associate comment with blog based on passed id form.instance.blog=get_object_or_404(Blog, pk = self.kwargs['pk']) # Call super-class form validation behaviour return super(BlogCommentCreate, self).form_valid(form)
get_success_url()
,并为原来的博客 “反转” URL 。您可以使用self.kwargs
属性,获取所需的博客ID,如上面的 form_valid()
方法所示。我们简要地讨论了在Django教程 6:通用列表和详细信息视图主题中,在基于类的视图中,将上下文传递给模板。要执行此操作,您需要覆盖get_context_data()
(首先,获取现有上下文,使用要传递给模板的任何其他变量,更新它,然后返回更新的上下文)。例如,下面的代码片段,显示了如何根据BlogAuthor
id,将 blogger 对象添加到上下文中。
class SomeView(generic.ListView): ... def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(SomeView, self).get_context_data(**kwargs) # Get the blogger object from the "pk" URL parameter and add it to the context context['blogger'] = get_object_or_404(BlogAuthor, pk = self.kwargs['pk']) return context
这个任务的评估,可以在Github上找到。此评估主要基于您的应用程序,满足上面列出要求的程度,尽管评估的某些部分,会检查您的代码是否使用了适当的模型,并且您至少编写了一些测试代码。完成后,您可以查看我们完成的示例,该示例项目的表现是 “满分”。
完成本单元后,表示您还完成了所有 MDN 用于学习《基本 Django 服务器端网站编程》的内容!我们希望您喜欢这个模块,并感觉您已经掌握了基础知识!
{{PreviousMenu("Learn/Server-side/Django/web_application_security", "Learn/Server-side/Django")}}