Django簡單快速實現PUT、DELETE方法


使用django的小伙伴們應該都知道我們是無法開心的處理PUT跟DELETE的

 1 $.ajax({
 2     url: 'XXX',
 3     type: 'PUT',
 4     dataType: 'json',
 5     data: {
 6         's': $("#select-id").find("option:selected").text()
 7     },
 8     success: function (data) {
 9         console.log('ok');
10     }
11 })
 1 def func(request):
 2     if request.method == 'GET':
 3         s = request.GET.get('s', None)
 4         return XXX
 5     elif request.method == 'POST':
 6         s = request.POST.get('s', None)
 7         return XXX
 8     elif request.method == 'PUT':
 9         s = request.PUT.get('s', None)                    # 我們希望愉快的獲取繼續處理
10         return XXX
11     elif request.method == 'DELETE':
12         s = request.DELETE.get('s', None)                # 我們希望愉快的獲取繼續處理
13         return XXX
14     else:
15         pass

很不幸,在默認情況下,我們不能很輕易的根據restful來寫url,但是,懶癌的威力是無窮大的!emmmmmmm.....

首先我們需要在django里某個app下添加一個中間件py文件,命名隨意,這里我叫middleware

 1 #!/usr/bin/env python
 2 # -*- coding:utf8 -*-
 3 # __author__ = '北方姆Q'
 4 
 5 from django.http import QueryDict
 6 try:
 7     from django.utils.deprecation import MiddlewareMixin    # 1.10.x
 8 except ImportError:
 9     MiddlewareMixin = object                                # 1.4.x-1.9.x
10 
11 
12 class HttpPost2HttpOtherMiddleware(MiddlewareMixin):
13     def process_request(self, request):
14         """
15         可以繼續添加HEAD、PATCH、OPTIONS以及自定義方法
16         HTTP_X_METHODOVERRIDE貌似是以前版本的key???
17         :param request: 經過原生中間件處理過后的請求
18         :return:
19         """
20         try:
21             http_method = request.META['REQUEST_METHOD']
22             if http_method.upper() not in ('GET', 'POST'):
23                 setattr(request, http_method.upper(), QueryDict(request.body))
24         # except KeyError:
25         #     http_method = request.META['HTTP_X_METHODOVERRIDE']
26         #     if http_method.upper() not in ('GET', 'POST'):
27         #         setattr(request, http_method.upper(), QueryDict(request.body))
28         except Exception:
29             pass
30         finally:
31             return None

然后在django的settings里注冊此中間件就好了

 1 MIDDLEWARE = [
 2     'django.middleware.security.SecurityMiddleware',
 3     'django.contrib.sessions.middleware.SessionMiddleware',
 4     'django.middleware.common.CommonMiddleware',
 5     'django.middleware.csrf.CsrfViewMiddleware',
 6     'django.contrib.auth.middleware.AuthenticationMiddleware',
 7     'django.contrib.messages.middleware.MessageMiddleware',
 8     'django.middleware.clickjacking.XFrameOptionsMiddleware',
 9     'yourappname.middleware.HttpPost2HttpOtherMiddleware',                            # 改成自己的app名稱哦
10 ]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM