luc*_*uca 24 python django rest
我在寻找有关这方面的信息时遇到了一些困难,可能这不是正确的方法.我想基于http方法(GET或POST或DELETE或PUT)将请求路由到两个不同的视图函数.
由于它通常在REST apis中完成,这意味着相同的url具有基于HTTP方法的不同含义.
我没有在django的urls.py文件中看到这样做的方法,我想要像:
url(r'^tasks$', 'app.views.get_tasks', method='get'),
url(r'^tasks$', 'app.views.create_task', method='post'),
Run Code Online (Sandbox Code Playgroud)
(注意:我正在使用django 1.4)
hel*_*ate 21
我不认为你可以用不同的函数做到这一点而不向URL添加一堆逻辑(这绝不是一个好主意),但你可以检查函数内部的请求方法:
def myview(request):
if request.method == 'GET':
# Code for GET requests
elif request.method == 'POST':
# Code for POST requests
Run Code Online (Sandbox Code Playgroud)
您还可以切换到基于类的视图.然后,您只需要为每个HTTP方法定义一个方法:
class CreateMyModelView(CreateView):
def get(self, request, *args, **kwargs):
# Code for GET requests
def post(self, request, *args, **kwargs):
# Code for POST requests
Run Code Online (Sandbox Code Playgroud)
如果您决定使用基于班级的路线,另一个好的资源是http://ccbv.co.uk/.
Jur*_*ste 13
因为Django允许你在url配置中使用callables,你可以使用helper函数.
def method_dispatch(**table):
def invalid_method(request, *args, **kwargs):
logger.warning('Method Not Allowed (%s): %s', request.method, request.path,
extra={
'status_code': 405,
'request': request
}
)
return HttpResponseNotAllowed(table.keys())
def d(request, *args, **kwargs):
handler = table.get(request.method, invalid_method)
return handler(request, *args, **kwargs)
return d
Run Code Online (Sandbox Code Playgroud)
要使用它:
url(r'^foo',
method_dispatch(POST = post_handler,
GET = get_handler)),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8165 次 |
| 最近记录: |