解析器,路由控制,響應器

2022-05-05 00:57:13 字數 3095 閱讀 4929

urlencode,formdata,json

urlencode編碼,body體中的資料格式:

name = laqz&age=18&xx =yy

json編碼:

formdata: 需要有資料部分和檔案部分的分割

作用:根據請求頭 content-type 選擇對應的解析器對請求體內容進行處理。

使用:區域性使用:

from rest_framework.parsers import jsonparser,formparse

parser_classes = [jsonparser, ]

全域性使用:

rest_framework =

區域性使用指定的解析器:

parser_classes = [jsonparser, ]

三種

1.基本路由:url(r'^admin/', admin.site.urls)

2.半自動路由: url(r'^users/$', views.users.as_view()),

必須繼承:viewsetmixin,繼承順序

3.from django.conf.urls import url,include

from rest_framework import routers

#生成物件

router=routers.defaultrouter()

# 兩個引數,乙個是匹配的路由,乙個是檢視中寫的cbv的類

router.register('publish',views.publishview)

urlpatterns = [

# 渲染器通過這個判斷,返回渲染的頁面)

# url(r'^publish/', views.publishview.as_view()),

# 渲染器通過這個判斷,返回渲染的頁面)

# url(r'^publish\.(?p\w+)$', views.publishview.as_view()),

# 可以用 以下方式訪問

# 1

# 2

# 3 3

# 4 3.json

url(r'',include(router.urls))

]

一般不需要配置,使用預設的

作用:根據 使用者請求url 或 使用者可接受的型別,篩選出合適的 渲染元件。

使用者請求url:

內建的響應器

顯示json格式:jsonrenderer

預設顯示格式:browsableapirenderer(可以修改它的html檔案)

?format=api

**方式:adminrenderer

?format=admin

form表單方式:htmlformrenderer

?format=form

區域性使用:

from rest_framework.renderers import htmlformrenderer,browsableapirenderer

class bookdetailview(apiview):

renderer_classes = [htmlformrenderer,browsableapirenderer ]

全域性使用:

rest_framework =

1.先從我們定義的檢視類中找

class apiview(view):

#我們定義的檢視類繼承了apiview,如果在檢視類中定義了renderer(響應器,渲染器)_classes,則優先使用我們定義的

renderer_classes = api_settings.default_renderer_classes

2.再從配置檔案中找

api_settings.default_renderer_classes

#api_settings如果沒有default_renderer_classes屬性,會觸發__getattr__方法

def __getattr__(self, attr):

...try:

#先從user_settings中查詢

val = self.user_settings[attr]

except keyerror:

#如果沒有找到,從預設配置中找

val = self.defaults[attr]

if attr in self.import_strings:

val = perform_import(val, attr)

self._cached_attrs.add(attr)

setattr(self, attr, val)

return val

@property

def user_settings(self):

if not hasattr(self, '_user_settings'):

#從配置檔案的'rest_framework'中查詢

self._user_settings = getattr(settings, 'rest_framework', {})

return self._user_settings

3.從預設配置中找

def __init__(self, user_settings=none, defaults=none, import_strings=none):

if user_settings:

...#可以例項化的時候傳入

self.defaults = defaults or defaults

#預設的配置檔案

defaults = {

# base api policies

'default_renderer_classes': (

'rest_framework.renderers.jsonrenderer',

'rest_framework.renderers.browsableapirenderer',

)#from django.conf import settings,如果使用者定義了就用使用者的配置,如果沒有定義就去預設的

使用解析器

使用解析器 使用解析器是非常簡單,可以使用它自己的詞法分析器,但是,用fsyacc.exe 產生的解析器總是要求詞法分析器。在這一小節,我們將討論如何使用自己的詞法分析器,以及與解析器聯合。警告記住f 編譯器不能直接使用.fsl 和 fsy 檔案,需要用fslex.exe 和 fsyacc.exe ...

指令碼解析器

指令碼解析器 命令指令碼解析器,自建立一種指令碼語法,解釋執行它。目前指令碼形式類似於命令,沒有變數型別的概念,關鍵字為 if else while break continue 解釋與c語言一樣。上傳 型別 無型別,全為字串看待。作用域 當前大括號中,以及所有子大括號中,退出當前大括號則清除變數。...

網頁解析器

學習任務 1.認識網頁解析器 學習目標 知識目標 1.熟悉網頁解析器 能力目標 1.能夠自主編寫網頁解析器 獲取新url函式 獲取新的url def get new urls self,page url,soup 儲存url new urls set 獲取所有的url 獲取每乙個url new ur...