搭建Django框架
-
django-admin startproject 项目名
- 目录结构:
- manage.py
包含若干子命令:
runserver
startapp - 主文件夹 - 与项目同名
- init.py
- wsgi.py
- urls.py
主路由配置文件 - settings.py
主配置文件
1.BASE_DIR
2.DEBUG
3.ALLOWED_HOSTS
4.INSTALLED_APPS
5.TEMPLATES
6.DATABASES
7.LANGUAGE_CODE
8.TIME_ZONE
9.MIDDLEWARE
- manage.py
- 目录结构:
- 路由系统
-
urls.py
包含基本的请求地址和处理函数的映射 -
url()
url(regex,views,kwargs=None,name=None)-
无参的路由
url(r’^01-test/$’,views.test) -
带参的路由
url(r’^02-test/(\d+)/$’,views.test2)def test2(request,num):
#num表示的是地址中的\d+的参数值,类型为字符串
pass
-
-
- 应用 - app
app是一个独立的业务模块- 创建 & 配置 应用
python3 manage.py startapp 应用名称
在settings.py中进行注册
INSTALLED_APPS = [
… …
‘创建的应用名’
] - 应用的结构
1.migrations 文件夹
2.init.py
3.admin.py
4.apps.py
5.models.py
6.tests.py
7.views.py - 分布式路由系统
请求先交给主路由配置文件,主路由配置分析请求意图做请求的分发
主路由配置文件 urls.py
- 创建 & 配置 应用
urlpatterns = [
url(r'^music/',include("music.urls")),
url(r'^sport/',include("sport.urls")),
url(r'^',include("index.urls")),
]
music.urls
urlpatterns = [
#http://localhost:8000/music/
url(r'^$',views.index)
]
================================================
- Django中的模板 - Templates
-
Django中的模板
Django中的模板是由Django自己提供的,而非Jinja2
所以Django中的模板语法与Flask中的模板语法会稍有不同 -
模板的配置
在 settings.py 中有一个 TEMPLATES 变量- BACKEND : 指定模板的引擎
- DIRS : 指定保存模板的目录
- APP_DIRS : 是否要在应用中搜索模板本
- OPTIONS : 有关模板的选项
-
模板的加载方式
-
通过 loader 获取模板,通过HttpResponse进行响应
from django.template import loader
#1.通过loader加载模板
t = loader.get_template(“模板名称”)
#2.将t转换成字符串
html = t.render()
#3.响应
return HttpResponse(html) -
使用 render() 直接加载并响应模板
from django.shortcuts import render
return render(request,‘模板的名称’)
-
-
模板的语法
-
变量
- 变量的语法
-
后端中必须将变量封装到字典中才允许传递到模板上
dic = {
“变量1”:“值1”,
“变量2”:“值2”,
}-
使用 loader 加载模板
t = loader.get_template(‘xxx.html’)
html = t.render(dic)
return HttpResponse(html) -
使用render加载模板
return render(request,‘xx.html’,dic)
-
-
在模板中使用变量
{{变量名}}
-
- 变量的语法
-
标签
- 作用
将一些服务器端的功能嵌入到模板中 - 标签语法
{% 标签 %}
{% 结束标签 %}
ex:
{% if 条件 %}
{% endif %}
1.if 标签
… …
2.for 标签
1.语法
{% for 变量 in 可迭代对象 %}
{% endfor %}
2.内置变量 - forloop
1.forloop.counter
得到当前循环遍历的次数,从1开始
2.forloop.counter0
得到当前循环遍历的下标,从0开始
3.forloop.first
4.forloop.last
- 作用
-
过滤器
- 作用
在变量输出前对变量的值进行筛选 - 语法
{{变量|过滤器:参数值}} - 有用的过滤器
1.default
2.default_if_none
3.floatformat
4.truncatechars
5.truncatewords
- 作用
-
静态文件
- 什么是静态文件
不能与服务器端做动态交互的文件都是静态文件
如:图片,css,js,音频,视频,html文件(部分) - 静态文件配置
在 settings.py 中配置一下两项内容:- 配置静态文件的访问路径
通过哪个url地址找静态文件
STATIC_URL = ‘/static/’- 说明:
指定访问静态文件时是需要通过 /static/xxx或 localhost:8000/static/xxx
xxx 表示具体的静态资源位置
- 说明:
- 配置静态文件的存储路径
静态文件在服务器端的保存位置
STATICFILES_DIRS=(os.path.join(BASE_DIR,‘static’),)
- 配置静态文件的访问路径
- 访问静态文件
-
使用静态文件的访问路径进行访问
访问路径: STATIC_URL=/static/
ex:
</img src="/static/images/a.jpg">
</img src=“http://127.0.0.1:8000/static/images/a.jpg”> -
通过 {% static %}标签访问静态文件
{% static %}表示的就是静态文件访问路径- 加载 static
{% load static %} - 使用静态资源时
语法:{% static ‘静态资源路径’ %}
</img src="{% static ‘images/a.jpg’ %}">
- 加载 static
- 练习:
将之前课程阶段中的果园首页,登录页,购物车页
构建成模板,放到FruitDay项目中- localhost:8000 : 显示首页效果
- localhost:8000/login : 显示登录页
- localhost:8000/cart : 显示购物车页
处理好所有的静态文件
-
- 什么是静态文件
-
模板的继承
- 在父模板中
要标识出哪些在子模板中是允许被修改的
{% block 块名 %}
{% endblock %}- block 作用:
- 在父模板中正常显示
- 在子模板中
不重写,将按照父模板的效果显示
重写,则按照重写效果显示
- block 作用:
- 在子模板中
- 指定要继承自哪个父模板
{% extends ‘父模板名称’ %} - 重写父模板中的内容
{% block 块名 %}
{% endblock %}
- 指定要继承自哪个父模板
- 注意
模板继承时,服务器端的动态内容无法继承
- 在父模板中
-
url()的name参数
- url语法
url(regex,views,kwargs=None,name=“别名”)
ex:
url(r’^user_login/$’,views.login,name=“login”) - 通过别名实现地址的反向解析
在模板中: {% url %}
{% url ‘别名’ %}
{% url ‘别名’ ‘参数值1’ ‘参数值2’ %}
- url语法
-
-