30π
β
I donβt think you can do this with different functions without adding a bunch of logic to the URL (which is never a good idea), but you can check inside the function for the request method:
def myview(request):
if request.method == 'GET':
# Code for GET requests
elif request.method == 'POST':
# Code for POST requests
You could also switch to class-based views. You would then only need to define a method for each of the HTTP methods:
class CreateMyModelView(CreateView):
def get(self, request, *args, **kwargs):
# Code for GET requests
def post(self, request, *args, **kwargs):
# Code for POST requests
If you decide to go the class-based route, another good resource is http://ccbv.co.uk/.
π€hellsgate
18π
Because Django allows you to use callables in url config, you can do it with a helper function.
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
To use it:
url(r'^foo',
method_dispatch(POST = post_handler,
GET = get_handler)),
π€Juri Pakaste
- [Django]-Django-Registration: Email as username
- [Django]-VueJS + Django Channels
- [Django]-"No installed app with label 'admin'" running Django migration. The app is installed correctly
2π
For Django 3.2 you can use require_http_methods
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
# I can assume now that only GET or POST requests make it this far
# ...
pass
See https://docs.djangoproject.com/en/3.2/topics/http/decorators/#django.views.decorators.http.require_http_methods for details
π€Kim Stacks
- [Django]-Django β New fonts?
- [Django]-Class Based Views VS Function Based Views
- [Django]-Django exception middleware: TypeError: object() takes no parameters
Source:stackexchange.com