1. django简介
1.1 django特点
- 提供创建项目工程自动化工具
- 数据库ORM支持
- 模板
- 表单
- Admin管理站点
- 文件管理
- 认证权限
- session机制
- 缓存
- 官方文档:https://docs.djangoproject.com/zh-hans/3.2/
- https://code.ziqiangxuetang.com/django/django-tutorial.html
2. django项目管理
2.1 安装
mkvirtualenv django && \
workon django && \
~/.virtualenvs/django/bin/python -m pip install --upgrade pip
pip install -i https://pypi.douban.com/simple Django
2.2 工程简介
django-admin startproject djangoDemo
python3 manage.py runserver 0.0.0.0:8000
.
├── db.sqlite3
├── djangoDemo
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
2.3 子应用
python3 manage.py startapp user
.
├── db.sqlite3
├── djangoDemo
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── user
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ ├── __init__.py
├── models.py
├── tests.py
└── views.py
3. 路由配置
3.1 全局路由表
from user.views import index
urls.py.urlpatterns = [
path('admin/', admin.site.urls),
path('index/', index),
]
3.2 子应用路由定义
from django.urls import path
from .views import index
urlpatterns = [
path('index', index),
]
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')),
]
4. 视图
4.1 类函数和函数视图
from django.http import HttpResponse
from django.views import View
def index(request):
"""
:params request: WSGIRequest,根据http请求携带的参数以及报文信息创建的对象,作为视图函数第一个参数传给视图函数,通常写成request
:return: 必须返回一个HttpResponse对象或子对象
"""
if request.method == 'GET':
return HttpResponse("<h1>Hello,Django GET</h1>")
if request.method == 'POST':
return HttpResponse("<h1>Hello,Django POST</h1>")
class IndexView(View):
def get(self, request):
return HttpResponse("<h1>Hello,Django Class GET</h1>")
def post(self, request):
return HttpResponse("<h1>Hello,Django Class POST</h1>")
4.2 视图路由配置
from django.urls import path
from projects import views
urlpatterns = [
path(r'index1/', views.index),
path(r'index2/', views.IndexView.as_view()),
]
5. 开发模式
5.1 MVT
- M: Model, 模型 与MVC中的M相同,负责对数据的处理
- V: View, 视图 与MVC中的C类似,负责处理用户请求,调用M和T,响应请求
- T: Template, 模板 与MVC中的V类似,负责如何显示数据(产生html界面)
- Django框架接收了用户请求和参数后,匹配URL,转发给对应视图进行处理;
- 视图调用M处理数据,再调用T返回界面给浏览器;
5.2 前后端分离
- 解耦合
- 后端仅处理数据
- 拓展性好:json格式,可多端共用
6. 请求和响应
6.1 请求参数
curl -X GET 'http://127.0.0.1:8000/user/index?name=zhangsan&age=18&name=lisi'
+ request.GET.get(key): 通过key获取get请求参数值(key存在多个值时获取最后一个)
+ request.GET.getlist(key): 通过key获取get请求参数值列表
curl -X POST 'http://127.0.0.1:8000/user/index' -d 'name=zhangsan&age=18&name=lisi'
+ request.POST.get(key): 通过key获取post请求参数值(key存在多个值时获取最后一个)
+ request.POST.getlist(key): 通过key获取post请求参数值列表
curl -X POST 'http://127.0.0.1:8000/user/index' -d '{"name":"zhangsan", "age": "18", "name":"lisi"}' -H "Content-Type:application/json"
+ request.body.decode('utf-8'): 获取json格式数据并转为字符串
import json
res = json.loads(request.body.decode('utf-8'))
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/860fa618f8b452691ab18708866b9ea5.png)
6.2 响应参数
HttpResponse(
content=b'',
content_type=None,
status=None,
reason=None,
charset=None,
headers=None)