1、什么是应用
应用表示的就是网站中一个独立的模块,包含独立的信息。
网易 ,是一个网站,是一个完整的项目,该网站可能会包含新闻,娱乐,体育,财经。。。不同的频道。这些频道在Django或网站中,可以被称为 "应用"
在整个项目的主文件夹中不要去处理其他的请求,主文件夹只做主要设置以及应用地址的 分发
2、创建应用
1、创建应用的命令
./manage.py startapp 应用名称
在项目中的体现 , 会出现一个应用的文件夹,文件夹中会包含应用的配置的文件 views.py,models.py
2、在 settings.py 中注册应用
在 INSTALLED_APPS中 追加应用名称即可
INSTALLED_APPS = [
'django.contrib.admin',
... ...
'应用名称',
]
3、应用的结构组成
1、migrations 文件夹
存放数据库日志文件,是一个django与数据库交互的中间文件
2、__init__.py 初始化应用的py文件
3、admin.py 与后台管理相关的 py 文件
4、apps.py 应用属性设置文件,不需要改
5、models.py Models模型文件
6、tests.py 测试模块,通常不用
7、views.py 定义视图的 py 文件
4、应用中的 url
1、作用
应用中的url负责匹配当前应用中的视图
由于应用中默认不带 urls.py 文件,所以该文件需要手动添加
2、添加 urls.py 文件
from django.conf.urls import url
urlpatterns = [
url()
]
2、django 模板(Tempate)
1、模板
就是一个网页文件,可以被view响应给用户的
解决了 复杂的 显示问题
2、模板的设置
在主设置文件 settings.py 中,增加对模板的设置
1、在 settings.py 中 找到 TEMPLATES
1、BACKEND :模板的搜索引擎,无需改动
2、DIRS :指定模板所存放的位置
DIRS = ['index.temp','music.temp']
但是,如果 DIRS 中不写任何内容的话,那么django会自动搜索一个叫 tempaltes 的文件夹
推荐方式:
DIRS 中什么都不写
每个应用中创建一个 templates 的文件夹,并将模板保存于此
3、APP_DIRS
True :首先从DIRS中指定的文件夹中查找模板,否则再找TEMPLATES
3、模板的加载方式
1、使用 HttpResponse 直接加载字符串
return HttpResponse("... ...")
2、使用 loader 获取模板,通过 HttpResponse 进行响应
from django.template import loader
def xxx(request):
t=loader.get_template('show.html')
html = t.render({})
return HttpResponse(html)
3、使用 render_to_response 或 render 直接加载
1、render_to_response
将来有可能被放弃
2、render
return render(request,'模板名称',参数字典)
4、路由文件中 url 函数中的 name 参数
url(regex,views,kwards=None,name=None)
name参数,允许为当前的 url 起一个名字,确保能够在 Template,Models,Views 在任何情况下都能找到对应的 url 请求地址
(有可能url请求地址匹配模式会发生改变)使用方式:
1、为 url 函数增加 name 参数,并起名
{%url 'name'%}
ex:
<a href="{%url 'name' 参数1 参数2%}">... ...</a>
或
{%url 'name' 参数1 参数2 %}
4、模板的语法
1、变量
作用:允许将后端的数据传递给模板(html),html会根据变量的值来显示内容
允许作为变量传递给模板的类型:
数字,字符串,列表,元组,字典(集合),函数,对象
获取变量值的语法:{{变量名}}
views.py
def template_var(request):
dic = {
'str':'字符串',
'num':5,
'list':[1,2,3,4]
}
return render(request,'模板地址',dic)
在视图中,使用 locals() 封装参数传递到模板
def show_views(request):
uname = 'xxx'
uage = 35
ugender = 'Male'
return render(request,'show.html',locals())