创建第一个项目
使用 django-admin 来创建 HelloWorld 项目:
django-admin startproject HelloWorld
创建完成后我们可以查看下项目的目录结构:
$ cd HelloWorld/
$ tree
.
|-- HelloWorld
| |-- __init__.py
| |-- asgi.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
|-- manage.py
目录说明:
- HelloWorld: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
settings.py 配置文件说明
1,配置项分为公有配置和自定义配置
2,配置项格式:BASE_DIR = ‘xxxxxx’(配置项名称必须大写)
3,常用配置项说明:
-
BASE_DIR: 当前项目的根目录的绝对路径。
-
DEBUG:项目的启动模式,True代表调试模式启动;False代表上线启动模式。
True模式特点:检测代码改动之后立马重启服务;详细的报错页面;
False模式特点:无
-
ALLOW_HOST:允许访问的网络阈。
[]空列表表示只有请求头中的host为127.0.0.1能访问本项目
[‘*’]表示任何请求头都能访问本项目
-
INSTALL_APPS:
-
ROOT_URLCONF:Django的主路由
-
LANGUAGE_CODE:语言设置
-
TIME_ZONE:时间区域设置
URL和视图函数
URL – 统一资源定位符(Uniform Resource Locator)
URL格式:protocol://hostname[:port]/path
path(route,views,name=None)
re_path(reg,views,name=None)
请求以及响应
请求的类型:
- GET:指定请求的页面信息,并实体主体。
- HEAD:类似于GET请求,但是返回的响应中没有具体的内容,用于获取报头。
- POST:向指定资源提交数据进行处理请求。数据包含在请求中。POST请求可能会导致新的资源的建立或者已有资源的修改。
Request参数的字段:
print(request.GET)
print(request.POST)
print(request.body)
print(request.path_info)
print(request.get_full_path())
<QueryDict: {'a': ['11'], 'b': ['112']}>
<QueryDict: {}>
b''
/page/111
/page/111?a=11&b=112
GET请求和POST请求
通过Request.method字段获取该请求是属于哪种请求并对应做出反应。
构建的form表单格式:
<form method = 'POST' action = '/response'>
username:<input type='text' name = 'uname'>
<input type= 'submit' value='subbit'>
</form>
需要在form表单内部指明方法为POST并且指出所属路由。
设计模式以及模板层
模板和标签
Django采用MTV设计模式(Model-Template-View)
加载模板:
方案一:
# views.py
from django.template import loader
# 通过loader加载模板
t = loader.get_template("模板名称")
# 将t转化成HTML字符串
html = t.render(dic)
# 完成响应
return HttpResponse(html)
方案二:
# views.py
from django.shortcuts import render
return render(request,'模板名称',dic)
模板的变量使用:
{{变量名}},{{变量名.index}},{{变量名.key}},{{对象.方法}},{{函数名}}
模板的标签:
{%标签%}
{%结束标签%}
过滤器和继承
过滤器格式见官网[https://docs.djangoproject.com/zh-hans/3.2/topics/templates/]
继承:
模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块
语法–父模板中:
- 定义父模板中的块block标签
- 标识出哪些在子模块中是允许被修改的
- block标签:在父模板中定义,可以在子模板中覆盖
URL反向解析
静态文件
什么是静态文件:css,js,视频,音频
在settings.py中配置STATICFILE_DIRS
应用
创建应用
python managy.py startapp xxx
之后在INSTALLED_APPS中注册该app
分布式路由
在主路由中调用include函数:include(‘app名字.url模块名’)
模型层以及ORM
ORM:Object Relation Mapping对象关系映射
数据库链接:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}