基于How To Tango With Django 1.9的重新实践(16)——Rango Exercises

来源:互联网 发布:数据库的er图怎么画 编辑:程序博客网 时间:2024/05/21 10:57

到目前为止我们已经为Rango添加了许多功能.我们通过建立这个应用让你熟悉Django框架,而且从中学到了建立自己网站时遇到的各种各样的困难和挑战.但是现在Rango还不够紧凑.在本章,我们将使各个功能更加紧凑,同时改善应用的用户体验并加入一些新的功能.

为了使我们的Rango耦合度更高我们将加入下面的功能.

  • 检测目录和页面的点击数,例如:
    • 累计目录访问次数
    • 累计页面访问次数
    • 收集目录喜欢数(查看19章)
  • 在目录里继承搜索和展示,例如:
    • 在每个目录页搜索页面而不是使搜索页分开.
    • 在侧边栏过滤目录(查看19章)
    • 当用户搜索时,只刷新搜索结果而不是刷新整个页面(查看19章)
  • 为注册用户提供服务,例如:
    • 假设你已经使用了django-registration-redux,我们需要设立注册表单来增加额外的信息(例如网站,个人图片)
    • 可以让用户查看自己的资料
    • 可以让用户修改自己的资料
    • 让用户查看其他用户和他们的资料

在我们开始添加功能之前我们将会为每个任务列出一个todo list.把任务划分成小任务将会简化任务的难度,所以让我们一起来各个击破吧.在这章,我们将提供给你上面任务的工作流程.已经学了这么多了,剩下的工作基本上可以独立完成了(除了请求AJAX).在下一章,我们将提供一些代码来展示如何完成这些功能.

16.1 跟踪页面点击

现在Rango提供了一个直接指向外部页面的链接.这对于我们追踪每个页面点击和查看次数很不利.为了累计页面查看次数你需要完成以下步骤.

  • 创建一个新的视图调用track_url(),并将其映射到URL/rango/goto/并命名’name=goto’。
  • 该track_url()视图将检查HTTP GET请求参数并拉出page_id。HTTP
    GET请求看起来像/rango/goto/?page_id=1。
    • 在视图中,选择/获取page与page_id再增加相关的views领域,save()它。
    • 让视图使用Django的redirect方法将用户重定向到指定的URL 。记住要包括导入,from django.shortcuts import redirect
    • 如果HTTP GET请求中没有参数page_id,或者参数没有返回Page对象,请将用户重定向到Rango的主页。使用reverse方法from django.core.urlresolvers获取URL字符串,然后重定向。如果您使用的是Django 1.10,那么您可以从中导入reverse方法django.shortcuts。
    • 请参阅Django快捷方式函数,了解更多on redirect和reverse。
  • 更新,category.html以便它使用/rango/goto/?page_id=XXX。
    • 请记住使用url模板标记,而不是使用直接网址

16.1.1 提示

如果你不确定如何检查HTTPGET请求的page_id参数,下面的代码将会帮助你

if request.method == 'GET':    if 'page_id' in request.GET:        page_id = request.GET['page_id']

每次都要先检查请求的GET方法,然后访问包含参数的request.GET字典.如果page_id在这个字典中,你可以用request.GET['page_id']提取出来.

16.2 在目录页搜索

Rango旨在为用户提供有用的页面链接目录.现在这个搜索功能是基于目录搜索的.如果能继承进目录浏览就好了.让我们假设用户将会首先浏览他们感兴趣的目录.如果找不到他们想要的页面,用户就会搜索.如果用户发现一个合适的页面,就会把它添加到目录里.让我们注意第一个问题,把搜索放入目录页.为了解决这个问题,需要以下几步:

  • 移除菜单栏的搜索链接.
  • 把搜索表单和结果模板从search.html放入category.html.
  • 修改搜索表单使它的action指向目录页,例如:form class=”form-inline” id=”user_form” method=”post” action=”{% url ‘category’ category.slug %}”>.
  • 修改目录视图获取HTTPPOST请求.视图将会获取模板上下文字典里的所有搜索结果.
  • 同时仅让注册用户才能够进行搜索.所以在category.html模板里加入{% if user.authenticated %}进行限制.

16.3 创建和浏览个人档案

如果您已经切换到django-registration-redux软件包,则必须收集UserProfile数据。为此,不需要将用户重定向到Rango索引页面,您需要将它们重定向到一个新的表单,以收集用户的个人资料图片和URL详细信息。要添加UserProfile注册功能,您需要:

  • 创建一个profile_registration.html将显示的UserProfileForm;
  • 创建一个UserProfileForm ModelForm类来处理新的表单;
  • 创建register_profile()视图以捕获配置文件详细信息;
  • 将视图映射到URL,即rango/register_profile/;
    和在MyRegistrationView,更新get_success_url()到指向rango/add_profile/。

另一个有用的功能是让用户检查和编辑自己的配置文件。采取以下步骤添加此功能。

  • 首先,创建一个名为的模板profile.html。在此模板中,添加与用户个人资料和用户(即用户名,电子邮件,网站和图片)相关联的字段。
  • 创建一个视图调用profile()。此视图将获取呈现用户概要文件模板所需的数据。
  • 将URL映射/rango/profile/到新profile()视图。
  • 在基本模板中,在菜单栏中添加一个名为Profile的链接,最好与其他用户相关的链接。这应该只对登录的用户可用(ie {% if user.is_authenticated %})。

要允许用户浏览用户配置文件,您还可以创建列出所有用户的用户页面。如果您点击用户页面,则可以看到他们的个人资料。但是,您必须确保用户只能编辑其个人资料!

0 0
原创粉丝点击