django
2023-07-02 17:30:21 6 举报
AI智能生成
django基本使用
作者其他创作
大纲/内容
文档
https://docs.djangoproject.com/zh-hans/4.2/intro/tutorial01/
https://www.cnblogs.com/clschao/articles/10391859.html
HTTP协议
1.请求格式
请求行
请求方法|空格|URL|空格|协议版本|回车符换行符
请求头
头部字段名:值|回车符换行符
请求头中的最后一个键值对后面追加2遍回车换行符
请求数据
get请求没有请求数据
post请求,请求数据在请求头后面
2.响应格式
状态行
协议版本|空格|状态码|空格|状态码描述|回车符换行符
响应头
头部字段名:值|回车符换行符
响应头中的最后一个键值对后面追加2遍回车换行符
响应正文
3.URL
https://www.processon.com/mindmap/6498c3847536f6009893b420
层级URL标记符号为[//],固定不变
服务器:
通常为域名,有时为IP 地址
端口:
0-56635,以数字方式表示,HTTP协议默认80端口
路径:
以"/"区分路径中的每一个目录名称
/mindmap/6498c3847536f6009893b420
查询:
GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,
通常以UTF8的URL编码,避开字符冲突的问题
通常以UTF8的URL编码,避开字符冲突的问题
https://www.cnblogs.com/clschao/articles/9230431.html?name=chao&age=18
4.请求方法
get
GET提交的数据会放在URL之后,也就是请求行里面,
以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456
以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456
常用的get请求方式:浏览器输入网址 ,a标签 ,form标签 method='get'
post
POST方法是把提交的数据放在HTTP包的请求数据部分中
post请求方法,一般都用来提交数据.比如用户名密码登录
get和post区别
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
其他方法
HEAD
PUT
DELETE
TRACE
CONNECT
PATCH
5.响应状态码
1xx消息
请求已经被服务器接收,继续处理
2xx成功
请求已成功被服务器接收
3xx重定向
需要后续操作才能完成这一请求
4xx请求错误
请求含有语法错误,或者无法被执行
5xx服务器错误
服务器在处理某个正确请求时发生错误
6.http协议特点
1.基于 请求-响应的模式
2.无状态保存
3.无连接
每次服务端响应完请求,会立即完成4次挥手断开链接
下载安装
1.官网地址
https://www.djangoproject.com/download/
2.pip安装
pip3 install django==4.2
mvc、mtv、mvvm模型
MVC
M:models数据库相关
V:views 视图逻辑相关
C:contgroller控制器, url分发,不同路径找不同的视图函数
MTV
M:models 数据库相关
T:templages 模板,html文件
V:views视图逻辑 + url控制器(MVC模型中的controller)
MVVM
后面补充
基础配置
1.创建项目
django-amdin startproject 项目名称
2.运行项目
python manage.py runserver 127.0.0.1:8080
若不指定端口,默认为8000
3.创建应用
python manage.py startapp 应用名称
创建应用后需要在 settings.py文件的 INSTALL_APPS下添加app配置
INSTALL_APPS = ['应用名称.apps.App01Config']
4.项目目录
manage.py
Django项目的工具,通过它可以调用django shel 和 数据库、关闭和启动项目与项目交互等等
settings.py
项目配置文件,包括数据库信息,调试标志及以及其他一些工作的变量
urls.py
url调度器,负责把URL映射到应用程序
wsgi.py
runserver 命令就是使用wsgiref模块作的简单的webserver, 后面会用renserver命令.
Settings配置
URL路径补全"/"
APPEND_SLASH = True
True 自动补全 /, False 取消自动补全 /
关闭CSRF字符串验证
MIDDLEWARE
注销:django.middleware.csrf.CsrfViewMiddleware'
app应用配置
创建django应用后,在settings文件下配置 INSTALL_APPS, 把应用所在包下的apps文件中的配置类引入
INSTALLED_APPS = [
# 以下两种写法都可以
'app01.apps.App01Config',
#'app01',
]
# 以下两种写法都可以
'app01.apps.App01Config',
#'app01',
]
host路径
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
template模版路径
TEMPLATES = ['DIRS': [BASE_DIR / 'templates']]
urls配置(路由分发)
项目文件夹下的urls.py文件写法
from django.contrib import admin
from django.urls import path, include
from root import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home), # root视图,项目登录页
path('home/', views.index), # 登录成功后,重定向跳转到 home.html
# path第一个参数是应用名,include通过 '应用名.urls'路由,跳转到应用下的视图
path('app01/', include('app01.urls')),
path('app02/', include('app02.urls')),
]
from django.urls import path, include
from root import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home), # root视图,项目登录页
path('home/', views.index), # 登录成功后,重定向跳转到 home.html
# path第一个参数是应用名,include通过 '应用名.urls'路由,跳转到应用下的视图
path('app01/', include('app01.urls')),
path('app02/', include('app02.urls')),
]
应用下的urls.py文件写法
a标签href中的url写法
语法: <a href="/url路径/">标签名</a>
<a href="/app01/">app01</a>
请求和响应常用属性和方法
请求相关
request -- HttpRequest对象
request.GET
获取GET请求提交的数据
http://127.0.0.1:8000/?username=zew&password=123
<QueryDict: {'username': ['zew'], 'password': ['123']}>
request.POST
获取POST请求提交的数据
request.META
获取GET请求头(Request Headers)相关信息,就是一个字典
获取请求头信息时,key前面加上“HTTP_”
request.META['HTTP_USER_AGENT']
请求路径
request.path
请求路径中的url
reqeust.path_info
请求路径中的url
request.get_full_path()
加上get请求参数
响应相关
render
回复html页面
return render(request, 'login.html')
HttpResponse
回复字符串时使用
return HttpResponse('404 Not Fond')
redirect(重定向)
重定向url路径
return redirect('/url路径/')
示例
def home(request):
if request.method == 'GET':
return render(request, 'login.html')
elif request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'zew' and password == '123':
return redirect('/home/') # 重定向
else:
return HttpResponse('用户名或密码错误')
# 重定向到首页
def index(request):
return render(request, 'home.html')
if request.method == 'GET':
return render(request, 'login.html')
elif request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'zew' and password == '123':
return redirect('/home/') # 重定向
else:
return HttpResponse('用户名或密码错误')
# 重定向到首页
def index(request):
return render(request, 'home.html')
# 项目下的urls.py配置
from django.contrib import admin
from django.urls import path, include
from root import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home), # root视图,项目登录页
path('home/', views.index), # 登录成功后,重定向跳转到 home.html
]
from django.contrib import admin
from django.urls import path, include
from root import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home), # root视图,项目登录页
path('home/', views.index), # 登录成功后,重定向跳转到 home.html
]
重定向状态码
302 临时重定向
旧地址资源还在,只是临时重定向到某个地址
301 永久重定向
旧地址的资源被永久地移除
旧地址的 ResponseHeaders 中的 Location 可查看重定向的URL地址
视图函数的编写模式
FBV(function based views)
视图中写视图函数
视图函数可以用装饰器装饰
CBV(class based views)
1. 继承父类 View
from django.views import View
父类 View 提供的一个静态方法 as_view() ,as_view 方法是基于类的外部接口,
他返回一个视图函数,调用后请求会传递给 dispatch 方法,dispatch 方法再根据不同请求来处理不同的方法
他返回一个视图函数,调用后请求会传递给 dispatch 方法,dispatch 方法再根据不同请求来处理不同的方法
2. views.py重写父类View中的dispatch方法
# django.Views.View中的dispatch方法
urls.py 调用继承自父类的as_view()静态方法;
视图类中重写父类的dispatch方法,dispatch方法自动根据不同的请求类型来处理不同的方法
视图类中重写父类的dispatch方法,dispatch方法自动根据不同的请求类型来处理不同的方法
3.CBV加装饰器函数
from django.utils.decorators import method_decorator
语法:
@method_decorator(装饰器函数名, name=’视图类中的方法名‘)
方式一:
给视图类中的某个方法加装饰器
@method_decorator(wrapper)
方式二:
给视图类中的dispatch方法加装饰器(相当于给类中的所有方法加了装饰器)
@method_decorator(wrapper)
方式三:
给视图类加装饰器
@method_decorator(wrapper, name='get')
装饰器函数:
0 条评论
下一页