1-1.Django
1.Django框架介绍
	1.什么是Django
		Django是一个开源框架,2005年发布,采用Python语言编写的.早期时主要做新闻和内容管理的网站的。Django本身提供了非常强大的后台管理系统
		版本:
			最高:2.1.2
			使用:1.11.8
		
		官网:http://www.djangoproject.com
		中文文档:http://djangobook.py3k.cn/2.0/
	2.框架模式
		MTV
			M :Models - 数据库模型
			T :Templates - 模板(网页)
			V :Views - 视图
2.Django框架的安装
	1.安装Django框架
		1.查看已安装的Django版本
			1.进入到终端以及python的交互模式
				交互模式:python3 / ipython3
			2.交互模式中输入:import django
				如果未报错:当前环境中已经装好Django
				如果报错:当前环境中没有Django
			3.查看已安装的版本
				交互模式中:django.VERSION
		2.安装Django
			1.在线安装 - 使用 pip3
				pip3 : 安装到 python3
				pip  : 安装到 python2
				sudo pip3 install django
				(安装Django的最新版本)
				sudo pip3 install django==1.11.8
				(安装Django的指定版本)
			2.离线安装
				1.下载安装包
				2.解压安装包
					tar -xvf Django-1.11.8.tar.gz
				3.进入到解压目录中,找到 setup.py 文件
					sudo python3 setup.py install
3.Django框架的使用
	1.创建项目
		1.创建目录 
			作用:用于保存所有的Django项目(可选)
			指令:mkdir django
		2.创建项目
			cd django
			使用 django-admin 指令创建 Django 项目
			语法:django-admin startproject 项目名
	2.Django项目的结构介绍
		1.manage.py
			包含执行django中的各项操作的指令(子命令)
				如:
					启动服务:runserver
					创建应用:startapp
					创建管理员:createsuperuser
					... ...
		2.主目录(与项目名称一致的目录)
			1. __init__.py
				项目的初始化文件,服务被启动,该文件自动被运行
			2.urls.py
				项目的基础url配置文件(基础的路由配置)
			3.wsgi.py
				Web Server Gateway Interface
				Web服务网关接口
			4.settings.py
				项目的配置文件
				1.BASE_DIR : 获取当前项目的绝对路径
				2.DEBUG : 是否启用调试模式
					True :启用调试模式(开发环境中推荐)
					False :不启用调试模式(生产环境中推荐)
				3.ALLOWED_HOSTS
					设置允许访问到本项目的地址列表
					如果为空的话,只有本机(localhost/127.0.0.1)才能访问
					如果允许在局域网中被外部机器访问的话:
					推荐写 [‘*‘],表示任何能够表示该机器的地址都能访问到当前项目
					如果允许被其他机器访问的话,启动服务时,必须使用以下方式:
					 ./manage.py runserver 0.0.0.0:端口号
				4.INSTALLED_APPS
					指定已安装的应用,如果有自定义应用的话,需要在此注册
				5.MIDDLEWARE
					中间件,如果有自定义的中间件,需要在此注册
				6.ROOT_URLCONF
					用于指定项目的基础路由配置文件
				7.TEMPLATES
					指定模板的信息
				8.DATABASES
					指定数据库的信息
				9.LNAGUAGE_CODE
					语言设置,如果需要中文的话,允许将值更改为 "zh-Hans"
				10.TIME_ZONE
					指定时区,中国时区的话,允许将值设置为 "Asia/Shanghai"
	3.URL的使用
		1.urls.py
			默认在主目录中,主路由配置文件,会包含最基本的地址映射。
			作用:通过urls中定义好的地址找到对应的视图处理函数
		2.url的语法
			作用:为了匹配用户的访问路径
			from django.conf.urls import url
			语法:
				url(regex,views,kwargs=None,name=None)
					1.regex:允许是正则表达式,匹配请求的url
					2.views:对应的视图处理函数的名称
					3.kwargs:字典,用来向views传参,如果没有参数可以省略
					4.name:为url起别名,在地址反向解析时使用
		3.通过url向视图传参
			1.使用正则表达式传参
				使用子组传参,一个子组就是一个参数,要传递多个参数的话需要使用多个子组,中间用 / 隔开
				子组 - ()
				urlpatterns = [
					#当访问路径是show/的时候,交给show_views处理
					url(r‘^show/$‘,show_views),
					#当访问路径是show/两位数字的时候,交给show1_views函数处理
					url(r‘^show/(\d{2})/$‘show1_views),
				]
				views.py
				def show1_views(request,num1):
					num1 表示的就是路径 "show/"后面的第一个参数
					pass
				练习:
					访问地址:localhost:8000/四位数字/两位数字/两位数字
					在网页中输出:生日为:xxxx年xx月xx日
			2.使用url()第三个参数 - 字典传参
				dic = {
					‘name‘:‘naruto‘,
					‘age‘:18,
				}
url(r‘^show3/$‘,show3_views,dic)
				views.py
				def show3_views(request,name,age):
					pass
4.Django中的应用
	1.什么是应用
		应用就是网站中的一个独立的程序模块
		在Django中,主目录一般不处理用户的具体请求,主目录主要做的是项目的初始化以及请求的分发(分布式请求处理),而具体的请求由各个应用去处理
	2.创建应用
		1.指令
			./manage.py startapp 应用名称
			ex:
				./manage.py startapp news
		2.在 settings.py 中进行注册
			在 INSTALLED_APPS 中追加引用名称
			INSTALLED_APPS = [
				‘djanog.contrib.admin‘,
				... ...,
				‘自定义应用名称‘,
			]
		练习:
			1.创建新项目 - netease
			2.创建 index 应用 ,并注册
			3.创建 sport 应用 ,并注册
			4.创建 music 应用 ,并注册
			5.创建 news  应用 ,并注册
	3.应用的结构组成
		1.migrations 目录
			存放数据库的中间文件
		2.__init__.py
			应用的初始化文件
		3.admin.py	
			应用的后台管理配置文件
		4.app.py
			应用的属性配置文件
		5.models.py
			Models 与模型相关的映射文件
		6.tests.py
			应用的单元测试文件
		7.views.py
			定义视图处理函数的文件
	4.分布式路由系统
		在每个应用中创建 urls.py ,内容的格式参考主目录的urls.py
		当访问路径是 http://localhost:8000/music/xxxx
		则交给music的urls去处理
		当访问路径是 http://localhost:8000/news/xxxxx
		则交给news的urls去处理
		当访问路径是 http://localhost:8000/music/index
		则交给music的urls找到 index_views 去处理
		当访问路径是 http://localhost:8000/news/index
		则交给news的urls找到 index_views去处理
		
		当访问路径是 http://localhost:8000/news/
		则交给news的urls找到 index_views去处理
	作业:
		1.访问路径 http://localhost:8000/login
			交给 index 应用中的 login_views 去处理
		2.访问路径 http://localhost:8000/register
			交给 index 应用中的 register_views 去处理
		3.访问路径 http://localhost:8000/
			交给 index 应用中的 index_views 去处理
@app.route(‘/show/<int:age>‘)
def show(age):
	age表示的就是地址上传递进来的age值
作业:
		1.访问路径 http://localhost:8000/login
			交给 index 应用中的 login_views 去处理
		2.访问路径 http://localhost:8000/register
			交给 index 应用中的 register_views 去处理
		3.访问路径 http://localhost:8000/
			交给 index 应用中的 index_views 去处理
只要访问路径不是 admin/**,music/**,news/** 的话,剩下的请求一律交给 index 应用去处理
1.Django中的模板(Templates)
	1.什么是模板
		模板就是要动态呈现给用户的网页
		模板的本质就是网页- 前后端,动静结合的网页
		Django的模板引擎是由Django自己提供的,并不是Jinja2,所以Django的模板语法与Flask(Jinja2)的语法会有一些不同
	2.模板的设置
		在 settings.py 中 有一个 TEMPLATES 变量
		1.BACKEND:指定使用的模板的引擎
		2.DIRS :指定模板的存放目录们
			1.如果写东西:则按照写好的路径去找模板
			2.如果未写东西:那么Django会自动的到每个应用中所有一个叫templates的目录来作为模板的存放目录
		3.APP_DIRS : 是否自动搜索应用中的目录
			True:表示搜索应用中的 templates 的目录
	3.模板的加载方式
		1.通过 loader 对象获取模板,再通过HttpResponse进行响应
			from django.template import loader
			def xxViews(request):
				#1.通过 loader 加载模板
				t = loader.get_template("模板名称")
				#2.将模板渲染成字符串
				html = t.render()
				#3.将字符串通过HttpResponse响应给客户端
				return HttpResponse(html)
		2.使用 render 直接加载并响应模板
			def xxViews(request):
				return render(request,‘模板的名称‘)
	4.模板的语法
		1.变量
			1.作用:将后端的数据传递给模板进行显示
			2.在Django中允许作为变量传递给模板的数据类型
				字符串,整数,列表,元组,字典,函数,对象
			3.变量的语法
				变量们必须要封装到字典中才能传递给模板
				1.使用 loader 加载模板
					dic = {
						‘变量名1‘:‘值1‘,
						‘变量名2‘:‘值2‘,
					}
					t = loader.get_template(‘xxx.html‘)
					html = t.render(locals() 或 dic)
					return HttpResponse(html)
				2.使用 render 加载并返回模板
					dic = {
						‘变量名1‘:‘值1‘,
						‘变量名2‘:‘值2‘,
					}
					return render(request,‘xx.html‘,dic)
			4.在模板中使用变量
				{{变量名}}
		2.标签
			1.作用
				将服务器端的功能嵌入到模板中
			2.语法
				{% 标签内容 %}
			3.常用标签
				1. comment 标签
				2. for 标签
					作用:循环遍历 列表,字典,元组
					语法:
						{% for 变量 in 列表|元组|字典 %}
						{% endfor %}
						循环中允许使用 forloop 内置变量来获取循环的信息
							forloop.counter : 当前循环遍历的次数
							forloop.first : 判断是否为第一次循环
							forloop.last : 判断是否为最后一次循环
				3.if 标签
				作用:在模板中完成变量的判断操作
				语法:
					1. if
						{% if 条件 %}
							满足条件时要执行的内容
						{% endif %}
					2. if ... else
						{% if 条件 %}
							满足条件时要执行的内容
						{% else %}
							不满足条件时要执行的内容
						{% endif %}
					3.if ... elif ... else
						{% if 条件1 %}
							满足条件1时要执行的内容
						{% elif 条件2 %}
							或满足条件2时要执行的内容
						{% elif 条件3 %}
							或满足条件3时要执行的内容
						{% else %}
							或以上条件都不满足时要执行的内容
						{% endif %}
		3.过滤器
			1.什么是过滤器
				在变量输出显示之前,对变量进行筛选和过滤
			2.过滤器的语法
				{{变量|过滤器:参数}}
			3.常用过滤器
				1.{{value|upper}}
					将value变为大写
				2.{{value|lower}}
					将value变为小写
				3.{{value|add:num}}
					将num值累加到value之后
				4.{{value|floatformat:n}}
					将value四舍五入到n位小数
				5.{{value|truncatechars:n}}
					将value截取保留至n位字符(包含...)
		4.静态文件
			1.什么是静态文件
				在Django中,不被解释器所动态解析的文件就是静态文件
			2.Django中静态文件的处理
				在settings.py中设置有关静态文件的信息:
				1.设置静态文件的访问路径
					在浏览器中通过哪个地址能够找到静态文件
					STATIC_URL = ‘/static/‘
					如果访问路径是 http://localhost:8000/static/...,那么就到静态文件存储路径中找文件而不走路由(urls.py)
				2.设置静态文件的存储路径
					指定静态文件存储在服务器上的哪个位置处
					STATICFILES_DIRS=(os.path.join(BASE_DIR,‘static‘),)
					静态文件目录的存放位置:
						1.在项目的根目录处创建一个 static 目录,用于保存静态文件们
						2.每个应用中也可以创建一个 static 目录,用于保存静态文件们
			3.访问静态文件
				1.直接使用静态文件访问路径进行访问
					http://localhost:8000/static/..
					ex:
					< img src="/static/images/a.jpg">
					< img src="http://localhost:8000/static/images/a.jpg">
				2.使用 {% static %} 访问静态资源
					{% static %} 表示的就是静态资源的访问路径
					1.在模板的最顶层增加
						{% load static %}
					2.在使用静态资源时
						< img src="{% static ‘images/a.jpg‘%}">
在Flask中:
	return render_template(‘xxx.html‘,name=‘sf.zh‘,age=36)
	return render_template(‘xxx.html‘,params={xxx:xxx})
	return render_template(‘xxx.html‘,params=locals())
	在 xxx.html 中,通过 :
		params.变量名 来调用变量
原文:https://www.cnblogs.com/luxg/p/10349131.html