(续前)
7d上图–点击add(添加),给模型Blog2(使用django默认的sqlite3数据库)添加几篇文章,用于后面的测试。
7e上图–打开添加文章的页面加入内容后保存
7f上图–暂时添加这几篇。要继续添加的话,可以点击箭头指向的按钮。
7、给‘管理后台’添加一些功能
1a上图–用vi 打开文件admin_py
1b上图–修改“/var/www/my/app2/”目录下的admin.py文件。
1c上图–与前面7f图相比,‘后台管理’页面出现了一些变化。
8、编写视图文件views.py
1a上图–在‘应用’app2目录下,用vi编辑器打开views.py文件。编写‘视图views.py文件里有关函数。其各个‘函数/功能’的作用是根据用户点击urls产生的request(请求)、提取相应的数据/内容、配上相应的模板(html文件),返回给客户浏览器显示出来…
1b上图–这是views.py文件初始状态。
1c上图–编写后的views.py。
9、编写模板文件(templates)。就是.html文件
1a上图–按照django常用的默认方式,在‘应用’app2目录下,建立需要用到的模板目录templates和其下与‘应用同名的’子目录app2。如图。
2a上图–在templates目录下创建base.html文件。所谓模板就是带有django框架的html文件。路径是…/my/app2/templates/base.html,以及header.html页面头部和footer.html页面底部…
2b上图–这是基础模板base.html
2c上图–这是header.html
2d上图–这是footer.html
3a上图–在templates/子目录下再创建一个子目录app2(与本‘应用’同名的)。并在其下创建title.html文件,作为网站首页;然后创建content.html文件,作为显示文章内容的页面。如图。
注:ubuntu-Linux创建目录的命令:mkdir 目录名;创建文件的命令:vi 文件名filename,会进入vi文本编辑器…;或者touch 文件名filename(图2b),直接创建文件,以后需要撰写、编辑时可以用vi等工具打开…进行这些操作可能经常遇到权限问题,挺折腾的,好像是ubuntu-linux这类操作系统的特点。ls 命令显示目录内的文件列表。
3b上图–这是title.html
3c上图–这是content.html
10、分别修改和创建项目my下、以及‘应用’app2下的两个urls.py文件
1a上图–打开项目‘my’下的管理文件子目录my(这是创建项目时django自建的子目录【与项目同名】)和urls.py文件,进行修改。
1b上图–在#0位置增加了include。在#1、#2增加两行,把‘应用’app2的urls.py包含进来。#1、#2都是匹配到title.html。#1是把网址或IP根目录指向‘应用’app2目录下的urls模块;#2是在网址加上‘应用名’app2/后也指向urls模块。
2a上图–在‘应用’目录app2之下再创建一个urls.py文件,以配置本‘应用’app2子目录下的urls。
2b上图–打开‘应用’app2子目录下的urls.py。
2c上图–对‘应用’app2目录下urls.py文件的编写。如图。第二个参数是指向views.py文件里的函数,由函数/‘方法’获取数据和相应的模板并结合之后显示到用户的浏览器。
11、把css、js等文件复制到static目录下
1a上图–在‘应用’目录app2之下建立子目录static,用于存放css、javascript和图像等等静态文件。
2a上图–通过浏览器打开bootstrap网站下载bootstrap-3.3.7-dist.zip并解压出来(这个操作跟windows基本一样)。
2b上图–用图中的命令进入它们所在目录(文件夹),用拷贝命令及参数(-R)把其子目录和文件全体复制到本项目相应的目录下(/var/www/my/app2/static/)。
2c上图–现在用tree命令查看到,所有子目录及文件都已经复制过来。注意:如果目标子目录下有同名的子目录和同名文件,将会被覆盖。
12、网站显示效果
1a上图–首页
1b上图–文章显示页
13、模拟‘发布/部署’网站
上面网站显示的页面是利用django自带的web服务(runserver)的输出,是处于django的所谓开发状态(in development)。
开发完成后,需要发布或部署到公开域名或IP地址,进入所谓‘生产/产品/成品/实用’状态(in production)。这这之后可以继续扩充、修改…
1a上图–打开终端用 ifconfig 命令查看本机IP地址。提示命令不存在,可以安装。依照提示安装。
1b上图–查到路由器分配给本机在局域网的网址是192.168.1.10。
1c上图–在virtualbox虚拟机有时候查到上面这种inet地址。那么按下面2个图进行。点击虚拟机上端一行的**‘控制’-‘设置’**可以打开以下页面按图设置。
1d上图–把连接方式修改成下面1f图的选项–
1f上图–之后回到终端再用命令 ifconfig查询就可以(也可能需要重启一下虚拟机)。
2a上图–打开‘项目’目录/管理文件子目录下的settings.py即:/var/www/my/my/settings.py。找到如图的两项。
2b上图–修改settings.py后,如图。列表框中可以列出多个网址或/和IP,记得加引号和逗号。
这时原先正常显示网站的本机地址127.0.0.1:8000(如果没有加入到ALLOWED_HOSTS列表中的话),就不能正常使用了,显示‘bad request (400)’。django方面的设置事项先到这里。
13.1、对apache2做相关设置
常用命令(1-3启动/重启及关闭apache2。4-6启动或停止.conf文件):
-
sudo service apache2 restart
-
sudo service apache2 stop
-
sudo systemctl reload apache2
-
sudo a2ensite test.conf
-
sudo a2dissite test.conf
-
sudo a2enmod wsgi 检测有没有安装 libapache2-mod-wsgi-py3
3a上图–输入192.168.1.10,可以看到,显示的是apache2的默认页。如本文第一部分开头指出,这个页面的位置和名称是:/var/www/html/index.html。
3b上图–需要设置的apache2的文件所在目录:/etc/apache2/sites-available/。需要对该目录下的文件000-default.conf进行修改。为了以后方便,保留原文件,复制其内容到一份新命名为app2.con的文件中。以后只对app2.conf操作即可。
3c上图–打开app2.conf,看到其原先的内容(与000-default.conf相同)。用命令vi app2.conf打开。如果提示权限不够,就在命令前加上,sudo。要求口令的话,输入即可。
3d上图–修改app2.conf,第13-20行是对原文件所作的修改和增加。(vim显示行数的命令:1、esc 2、shift+: 3、set nu)
3e上图–用命令sudo a2dissite 000-default.conf停止 000-default.conf文件。用命令 sudo a2ensite app2.conf 激活app2.cnf文件。此处遇到无法启动apache2之故障。用页面提示的 systemctl status apache2.service 命令和 jounalctl -xe 命令查询,根据得到的信息,猜测可能是自己进行修改和添加的每行后面加了#符号和注解文字引起。于是把这些符号及文字删掉…
3f上图–删掉后再用命令sudo service apache2 restart 和命令 sudo systemctl reload apache2 启动apache2就正常了。在ubuntu终端输入命令后,出现新命令提示符,就是运行正常。
3g上图–不启动django自带的web服务器(runserver)。直接地址栏输入192.168.1.10访问。现在是通过apache2的网络服务。已经可以正常访问。如果是租用或购买的外部服务器和公开IP地址或域名的话,就是已经发布/部署为‘生产/产品’(in production)状态,提供网络信息服务了。但是页面的版式不正常。
3h上图–在app2.cnf中添加 Alias /static/ /var/www/my/app2/static/ (第20行)。保存退出。重新启动apache2。
3j上图–现在首页和文章页的样式正常了。
4a上图–但是后台管理页面还是不正常。后台管理页面用的是django自带的版式。
4b上图–在my/my/settings.py文件底部,static_url=行的下面增加一行:static_root=“自己static目录”。如图。
4c上图–用命令 python mange.py colletstatic 把所有static子目录及文件拷到设定目录下。后台登录页面样式正常了。下图。
4d上图–
5a上图–但是登录后出现server error(500)页面。
5b上图–将项目my所有者和所属组均更改为www-data
5c上图–更改后,后台管理页面已经正常显示
5d上图–点击箭头指向的‘增加BLOG2’按钮,添加新文章。
5e上图–箭头所指,为新添加的文章。
5f上图–回到网站首页。这是‘部署/产品/生产’(in production)状态。没有启动django自带测试用的runserver服务器。