Python中Django框架如何限制URL的请求方式?类似Flask的app.route('/', methods=['POST'])
Python中Django框架如何限制URL的请求方式?类似Flask的app.route(’/’, methods=[‘POST’])
django rest framework 有类似 flask 写法,也可以通过在 View 类定义请求方法来限制
在Django里限制URL的请求方式,主要是在视图函数或类视图上做文章,和Flask的装饰器方式不太一样。Django的URL配置(urls.py)本身不处理这个,它只管路由。
1. 使用装饰器(最像Flask的方式)
Django内置了require_http_methods等装饰器,可以直接用在函数视图上。
from django.http import HttpResponse
from django.views.decorators.http import require_http_methods
@require_http_methods(["POST"]) # 只允许POST
def my_view(request):
# 你的处理逻辑
if request.method == 'POST':
return HttpResponse("POST请求成功")
# 由于装饰器,GET等请求根本不会执行到这里
2. 在视图函数里手动判断(最直接) 自己写个判断,虽然土但很清晰。
from django.http import HttpResponse, HttpResponseNotAllowed
def my_view(request):
if request.method == 'POST':
# 处理POST逻辑
return HttpResponse("POST请求成功")
else:
# 返回405 Method Not Allowed
return HttpResponseNotAllowed(['POST'])
3. 使用类视图(更Django的方式)
用django.views.View,重写对应的HTTP方法函数。比如只允许POST,就只定义post方法。
from django.http import HttpResponse
from django.views import View
class MyView(View):
def post(self, request, *args, **kwargs):
# 只处理POST请求
return HttpResponse("POST请求成功")
# 不定义get()等方法,Django会自动返回405
4. 使用django.views.decorators.http里的其他装饰器
还有一些现成的:
require_GET: 只允许GETrequire_POST: 只允许POSTrequire_safe: 只允许GET和HEAD
用起来和第一个例子一样。
总结一下:
想简单像Flask就用@require_http_methods装饰器;想用Django的经典风格就上类视图,只定义你需要的方法。
你不在 view 里写 post 接收方法不就完了
<br>(['GET'])<br>
view 里:
if request.method == ‘POST’:
post = request.POST
…
<br>class TestView(View):<br> def get(self, request):<br> ......<br> def post(self, request):<br> ......<br>
from django.views.decorators.http import require_POST, require_GET
def query():
pass
def add():
pass

