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源码点点点
posted @ 2019-11-06 08:24  张明岩  阅读(260)  评论(0编辑  收藏  举报