到目前为止我们已经为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 %})。
要允许用户浏览用户配置文件,您还可以创建列出所有用户的用户页面。如果您点击用户页面,则可以看到他们的个人资料。但是,您必须确保用户只能编辑其个人资料!