drf框架安装以及源码解析
drf框架安装以及源码解析
一 drf框架安装
安装
>: pip3 install djangorestframework
drf项目跑起来的基本配置:
settings.py
# 注释掉csrftoken
# 注册drf app
NSTALLED_APPS = [
# ...
'rest_framework',
]
# myslq 数据库配置
DATABASES = {
'default': {
# 'DIRS': [os.path.join(BASE_DIR, "templates"),],
'ENGINE': 'django.db.backends.mysql',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'123',
'NAME':'django_db',
}
}
# 国际化配置 中文 以及 上海时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
# media资源配置
MEDIA_URL = '/media/' # 序列化media文件夹下的资源,会默认添加MEDIA_URL
# 配置访问静态文件位置 根据自己的需求配置
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
api下的init.py
import pymysql
pymysql.install_as_MySQLdb()
主urls.py
from django.conf.urls import url,include
from django.contrib import admin
from django.views.static import serve
from django.conf import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include('api.urls')),
# 会从这个接口获取到 图片信息。关于admin界面添加图片 是django admin自己添加的图片。
# 真正图片字段存的是 icon/01.jpg 实际上存的也是字符串
url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}),
]
分urls.py
from django.conf.urls import url
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^books/$', views.BookView.as_view()),
url(r'^books/(?P<pk>.*)/$', views.BookView.as_view()),
url(r'^users/$', views.UserView.as_view()),
url(r'^users/(?P<pk>.*)/$', views.UserView.as_view()),
# 整合序列化与反序列
url(r'^v2/users/$', views.UserV2APIView.as_view()),
url(r'^v2/users/(?P<pk>.*)/$', views.UserV2APIView.as_view()),
# admin qwe123qwe
]
特点:
# 具体功能在具体模块下
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.exceptions import APIException
from rest_framework.filters import OrderingFilter
from rest_framework.views import APIView
from rest_framework.pagination import PageNumberPagination
from rest_framework.settings import APISettings
#简单说一下 如果你想更改rest_framework默认配置可以 在我们自己的settings里面改东西。
#源码rest_framework\settings里面有详细讲解
# 自定义drf配置 - 在自己的settings.py
REST_FRAMEWORK = {
# 自定义修改drf的配置们
}
二 原生Django CBV 源码分析:View
"""
1)as_view()是入口,得到view函数地址
2)请求来了调用view函数,内部调用dispatch函数完成请求分发
3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相应
4)再将相应的结果一层层返回
"""
详情可以django源码点点点
三 drf CBV 源码分析:APIView
"""
1)as_view()是入口,得到view函数地址,在返回view函数地址时局部禁用csrf认证
2)请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发
3)dispatch函数 二次封装request、完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,得到相应,再对相应做渲染处理
4)再将相应的结果一层层返回
"""
详情可以django源码点点点