静态页面和动态页面
概念
什么是静态页面?
HTML
什么是动态页面?
比较
###联系
###1)静态网页是网站建设的基础,静态网页和动态网页都要使用到 HTMl 语言。
###2)静态网页是相对于动态网页而言,指没有后台数据库、不含程序和不可交互的网页、是标准的 HTML 文件,它的文件扩展名是.htm 或.html。你编的是什么它显示的就是什么、不会有任何改变。
###3)静态网页和动态网页之间并不矛盾,为了网站适应搜索引擎检索的需要,动态网站可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。
##区别
###1)程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页,例如 ASP、PHP、JSP、ASP.net、CGI 等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如 html页、Flash、javascript、VBscript 等等,它们是永远不变的。
###2)编程技术不同。静态网页和动态网页主要根据网页制作的语言来区分。静态网页使用语言:HTML。 动态网页使用语言:HTML+ASP 或 HTML+PHP 或 HTML+JSP等其它网站动态语言。
###3)被搜索引擎收录情况不同。由于编程技术不容,静态网页是纯粹 HTML 格式的网页,页面内容稳定,不论是网页是否被访问,页面都被保存在网站服务器上,很容易被搜索引擎收录。而动态网页的内容是当用户点击请求时才从数据库中调出返回给用户一个网页的内容,并不是存放在服务器上的独立文件,相比较于静态网页而言,动态网页很难被搜索引擎收录。
###4)用户访问速度不同。用户访问动态网页时,网页在获得搜索指令后经过数据库的调查匹配,再将与指令相符的内容传递给服务器,通过服务器的编译将网页编译成标准的 HTML 代码,从而传递给用户浏览器,多个读取过程大大降低了用户的访问速度。而静态网页不同,由于网页内容直接存取在服务器上,省去了服务器的编译过程,用户访问网页速度很快。
#5)制作和后期维护工作量不同。动态网页的设计以数据库技术为基础,可以实现多种功能,降低了网站维护的工作量。而静态网页由于没有数据库的支持,网页内容更改时需要直接修改代码,在网站内容制作和维护中,所需的工作量更大。动态网页与静态网页各有特点,网站设计师在网页设计时,主要根据网站的功能需求和网站内容多少选择不同网页。如,网站包含信息量太大时,就需要选择动态网页,反之,则选择静态网页。
模板的抽取和渲染
抽取逻辑
1, 先在一个文件夹下创建主站点的多个子页面,这些子页面将会作为该文件夹的子app
2,在设置中将该文件夹写入根路径,这样项目运行时所有多个子项目均可以被检测到
3,修改H5文件中的标签,向其插入多个模板标签
4,通过传统的URL--->VIEW--->H5方式调用,便于展示
文件目录
### static
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\static
### base & course & doc & news & user
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\template\base
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\template\course
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\template\doc
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\template\news
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\template\tzlook
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\template\user
页面分析
### 如何在文件夹中创建apps
1,manage.py文件在指定目录,所以不能到指定目录下使用命令 python manage.py startapp object
2, 老师的命令 python ../manage.py startapp object # 逻辑是到指定路径调用上一层路径的mange.py文件创建apps
### 创建多个apps的目的
在Django项目中,存在多个子页面,现在需要将多个子页面整合到一个页面当中显示,而现在创建的多项目对应的就是这些子页面
### 先创建项目文件夹,配置文件如下
### 创建多个子应用的过程
### 在主项目配置文件中为app注册
### 单独修改H5文件中的标签完成抽取
创建项目目录的命令
import os, sys
# 追加导包路径--->让程序在文件夹中寻找app
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)
# 告诉配置文件,到apps下寻找子应用
sys.path.insert(1, os.path.join(BASE_DIR, 'apps')) # 这里的apps是实际的应用名称而非apps的概念
创建多个子页面的代码流程
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook>cd C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\apps
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\apps>python ../manage.py startapp news
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\apps>python ../manage.py startapp course
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\apps>python ../manage.py startapp doc
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\apps>python ../manage.py startapp user
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook
C:\Users\41999\Documents\项目管理\duplicate\tzblog\Scripts\tzlook\apps>
在配置文件中,为项目文件下的多apps进行注册
# 如果遇到多apps报错,重启IDE,可能是搜索路径还没有添加上
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth', # 用户与权限认证应用
'django.contrib.contenttypes', # 为Model提供更高层次抽象接口应用,被auth依赖
'django.contrib.sessions', # 保存用户状态的会话应用
'django.contrib.messages', # 消息应用
'django.contrib.staticfiles',
'look.apps.LookConfig',
'book.apps.BookConfig',
'common',
'user',
'doc',
'news',
'course',
]
为base网页主文件创建一个配置文件
### look/views.py
def main_site(request):
return render(request, 'base/base.html')
### look/urls.py
path("main_site/", views.main_site, name='main_site'), # 使用filter方法查询数据
对H5文件的一般性处理
### 操作步骤
1, 将news下index.html复制到base下,新增文件base1.html
2,删除文件中第八行【 <link rel="stylesheet" href="../css/news/index.css">】
3,新增标签【{% block static %}】,请注意前后成对,在body之后也没有报错
4,将以下内容修改为模板标签内容
<title>{% block titile %}{% endblock titile %}</title>
### 指定模板抽取对象的文件位置,即CSS文件对象
<link rel="stylesheet" href="{% static 'css/base/reset.css' %}">
<link rel="stylesheet" href="{% static 'css/base/common.css' %}">
<link rel="stylesheet" href="{% static 'css/base/side.css' %}">
5,新增标签---用于表示链接
{% block link %}
{% endblock link %}
6,新增三个标签
% block main_start %}
<main id="main">
<div class="w1200 clearfix">
{% block main_contain %}
{% endblock main_contain %}
7,添加热门标签(注意观察代码注释和使用缩放)
{% block hot_recommend %}
模型的补充
1,两种查询规则介绍
### 特别注意导入特定的包
from django.db.models import F, Q
F查询:针对两个字段的值的比较
# F查询
# 学院id小于学生的学号的
rs = Student.objects.filter(departmnet_id_lt=F('s_id'))
# 给user表中的所有人加1岁
rs = User.objects.all().update(age=F('age') +1)
Q查询:如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。
Q对象可以使用& (and)、| (or) 操作符组合起来
使用~(not)操作符在Q对象前表示取反
# 查出user 表中name为taka或者xiaopo的
rs = User.objects.filter(Q(name='taka')|Q(name='xiaopo'))
#查询Student表中,name为xiaoming, 年龄不等于23的
rs = User.objects.filter(Q(name='xiaoming')&~Q(age=23))
2,如何在网站显示打印结果
### views.py的写法
return render(request, 'loads.html', context={'ob':ob})
### loads.html的写法
<a href="#">{{ob}}}</a>
3,走过的弯路
### 格式化字符串不支持数据库对象
### locals显示局部变量,首先不是HttpResponse的参数,其次无法通过值查看,最后只能在不传入任何参数的情况下打印类中的所有对象