4. render, redirect, HttpResponse, reverse
Render():
把模板和context結合在一起,返回一個帶有這個組合的Http響應。
render(request, template_name, context=None, content_type=None, status=None, using=None)
- request,template_name必填;
- context:A dictionary of values
- content_type:The MIME type to use for the resulting document
- status:返回狀態碼,預設200
- using:The NAME of a template engine to use for loading the template.
多用於渲染模板並返回。
Redirect():
返回一個http響應重定向到一個合適的URL(引數to提供)。
redirect(to, permanent=False, *args, **kwargs)
to:
- 可以是一個model(會自動呼叫get_absolute_url())
- 也可以是一個view的函式(或者是一個url 的name),此時會呼叫reverse進行url逆向解析。
- 同時也可以是一個硬編碼相對url和絕對url。
def my_view(request):
...
return redirect('https://example.com/')
return redirect('/some/url/')
return redirect(reverse('commons.views.invoice_return_index', args=[]))
Attention:redirect會返回302狀態碼(302重定向是暫時的重定向)
reverse():
用來在一個view函式中,通過url pattern進行跳轉,執行其他view函式。
reverse(viewname, urlconf=None, *args=None, **kwargs=None, current_app=None)
- viewname:當然可以用view.name,但是官網不建議這樣做,最好用在url pattern裡面每一個url的name。
path('archive/', views.archive, name='news-archive')
# using the named URL
reverse('news-archive')
args 和 kwargs 不能同時被傳遞。
urlconf:指明瞭當前執行reverse用到的URL patterns的URLconf module,預設使用當前執行緒的根URLconf 。這裡利用Get的方式進行返回,所以要傳遞引數時,url pattern裡要進行正則分析。個人覺得在不需要正規表示式時,是可以用return 直接呼叫function來代替的。
如果沒有匹配,就會返回異常:NoReverseMatch
注意,不是所有的表達都可以reverse:
The main restriction at the moment is that the pattern cannot contain alternative choices using the vertical bar ("|") character. You can quite happily use such patterns for matching against incoming URLs and sending them off to views, but you cannot reverse such patterns.
HttpResponse()
由程式設計師構造的一個物件,定義於django.http。不需要返回模板,直接返回該物件。
該物件有很多方式進行構造修改,更多非同步
談到HttpResponse,就不得不談到HttpRequest物件:
請求一張頁面時,Django把請求的metadata資料包裝成一個HttpRequest物件,然後Django載入合適的view方法,把這個HttpRequest 物件作為第一個引數傳給view方法。
- 任何view方法都應該返回一個HttpResponse物件。
- render是對HttpResponse物件的一種包裝,返回render就是返回一個被包裝的HttpResponse物件。
- HttpRequest物件由Django自動包裝,HttpResponse則是由程式設計師手動包裝。
HttpResponseRedirect()
是HttpResponse的一個子類,建構函式接受單個引數:重定向到的URL,類似Redirect,返回302狀態碼。
相關文章
- request與HttpResponseHTTP
- Document Redirect 與 XHR Redirect區別
- Django(26)HttpResponse物件和JsonResponse物件DjangoHTTP物件JSON
- http之RedirectHTTP
- REVERSE關鍵字之REVERSE函式函式
- JavaScript reverse()JavaScript
- [ruby] rails renderAI
- Reverse Key IndexesIndex
- BUUCTF reverse 3
- 重定向Redirect 的知識
- nginx的port_in_redirect配置Nginx
- forward和redirect的區別Forward
- 8、flask-Redirect重定向Flask
- Vue筆記之render函式(一):render: h => h(App)Vue筆記函式APP
- Render Props and HooksHook
- React render流程梳理React
- ReactDom render原理剖析React
- javascript 陣列 reverse()JavaScript陣列
- oracle reverse函式Oracle函式
- Reverse Card (Hard Version)
- hackme 【攻防世界】Reverse
- Render props、render callback 和高階元件皆可互換[譯]元件
- redirect 方法會丟失埠號
- 4.泛型泛型
- 4.陣列陣列
- 4.運算子
- react render propsGetterReact
- React Render Props 模式React模式
- unity render pipelineUnity
- iview表單render使用View
- React Render Array 效能大亂鬥React
- Multiple Render Targets in OpenGL with Cg
- Simple python reverse shellPython
- leetcode Reverse IntegerLeetCode
- Why would a reverse index be useful ?Index
- Reverse Key Indexes (219)Index
- Reverse學習筆記筆記
- Sanic response redirect() 函式用法和示例函式