4.1 梳理已有功能
对于一般的网站,我们都希望输入主域名就能访问网站的主页。在生产环境中,主域名以网站那个目录下的文件为主页,是可以通过服务器中的Nginx或者Apache来配置的。但是,我们目前的项目使用的是开发环境,可以暂时不处理这个问题,如果非要处理,也不是不行,并且难度不大,相信读者能够自己搞定。下面梳理本项目已有的功能,如下图所示。

4.1.1 修改导航栏
在前面的开发中,一直使用的那个导航栏完全是刚开始为了占位而定的,现在是修改它的时候了。编辑./templates/header.html文件,修改的部分代码如下。
1 <ul class="nav navbar-nav" role="navigation"> 2 <li><a href="{% url 'blog:blog_title' %}">BLOG</a> </li> 3 <li><a href="{% url 'article:article_titles' %}">文章</a> </li> 4 </ul>
修改之后,导航栏如下图所示,单击“文章”选项后,进入本项目所有文章的列表页面。
![]()
导航栏上有登录入口,但是缺少注册入口,请看一下前面关于注册的内容,是不是一直在使用某个URL访问呢?下面就为导航栏增加一个注册入口,代码如下。
1 <li><a href="{% url 'account:user_login' %}">LOGIN</a> </li> 2 <li><a href="{% url 'account:user_register' %}">Sign up</a> </li> #①
语句①是新增加的部分,再次刷新页面,就能看到注册入口了,如下图所示。
![]()
上述操作其实是在为以往做的功能设置入口。在开发中,有不少功能只要我们稍加改造,跳出程序员的圈子,换个角度想想,就能给用户一种耳目一新的感觉。
4.1.2 修改登录和注册后的跳转
在本项目中,已经完成了用户登录和注册功能,但是,完成这两个功能之后,页面跳转到哪里?前面没有认真对待,现在要补上。
1、登录后跳转页面
单击导航栏右侧的“Login”选项进行登录,但是登录之后,页面跳转到第1章中的内容,这不是本项目的需要,应该跳转到本网站认定的首页。所以,先做一个页面,作为本网站首页。
设想的这个首页是一个有图片的静态网页,本来可以使用前面学习过的知识完成,但是本着学习的目的,换一种方式,借用后面要学习的“通用视图”来制作。
在./testsite的urls.py文件中,引入通用视图TemplateView,代码如下。
1 from django.views.generic import TemplateView
然后在本文件中的URL映射表中增加如下配置代码:
1 path('home/',TemplateView.as_view(template_name="home.html"),name = "home"),
暂且按照上面的步骤来做,至于其中的缘由,后面会揭晓的。
接下来在./templates/目录中创建home.html文件,并编写如下代码。
1 {% extends "base.html" %} 2 {% load staticfiles %} 3 {% block title %}Home page{% endblock %} 4 {% block content %} 5 <div class="text-center"> 6 <h1>WELCOM YOU</h1> 7 <h3>Life is short.You need Python</h3> 8 <h2>Django makes it easier to build better web apps more quickly and with less code.</h2> 9 <img src="{% static 'images/book.jpg' %}"> 10 </div> 11 {% endblock %}
在保证Django服务运行的情况下,可以通过http://127.0.0.1:8000/home/查看刚才所做页面的效果,请再看一下上面的流程,我们没有写视图函数,是不是很奇妙?这就是Django的特点。

在导航栏中,一般来讲要有首页入口,所以修改./templates/header.html文件,增加如下导航内容的代码。
1 <li><a href="{% url 'home' %}">HOME</a> </li>
根据小图所示的效果,应该知晓上述代码的安放位置。

刷新http://127.0.0.1:8000/home/页面,显示报错。

还记得之前./testsite/settings.py文件中的LOGIN_REDIRECT_URL='/blog/'吗?这是设置的目的就是要实现登录之后的跳转目标页,现在修改它就能达成前述功能要求,代码如下:
1 LOGIN_REDIRECT_URL = '/home/'

如果已经登录,请退出后再登录,测试一下是否跳转到了我们刚刚设置的首页。
2、注册后跳转页面
在原来的功能中,注册后没有跳转页面,只是返回一个提示“successfully”。当然,注册失败也是类似的。
现在就要修改一下,如果用户注册成功,自动跳转到登录页面,等待用户登录。
修改./account/views.py文件中的register()方法,首先引入一个我们已经使用过的函数reverse(),代码如下。
1 from django.urls import reverse #./account/views.py 头部引入
然后将register()函数中的return HttpResponse("successfully")用下面的代码替换。
1 return HttpResponse(reverse("account:user_login"))
这样,当用户注册成功之后,就跳转到登录页面了。
其实,对register()函数的其他返回也可以进行修改,这个功能就留给聪明的读者尝试了。
4.1.3 知识点
1、关于Git
在软件开发中,版本控制是必须的,因为作为一名程序员,在编程时会遇到各种不可预知的问题,需要利用版本控制来维护源码、记录改动、回滚历史、设置不同分支等,并且使不同级别的人对代码有不同的控制权限。
对于版本控制,有的人会认为等于复制。如果不严格地说,也将就着算吧,但这绝对不是程序员的方法,程序员的方法是要使用某种版本控制系统实现对版本的管理。
关于版本控制系统的历史,读者可以通过查阅资料自己去了解。这里只说当前,而且重点推荐笔者喜欢的版本控制系统--------Git。
Git的发明人是曾经在1991年创建了Linux的Linus。想了解和学习Git,可以登录官网(https://git-scm.com)学习。
仅有Git还不是程序员的终极目标。2007年,又出现了一个GitHub,它是一个通过Git进行版本控制的软件源代码托管服务网站,是当今世界上最大的代码存放网站和开源社区之一。在GitHub之后,亦有一些模仿者出现。
笔者在这里建议读者到github.com上注册,学习如何使用,并且把随同本书建立的项目代码存放到GitHub。
浙公网安备 33010602011771号