mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 05:04:31 +03:00
Add parsers, form validation, etc...
This commit is contained in:
parent
c56e48f52e
commit
c10a95de08
39
src/rest/utils.py
Normal file
39
src/rest/utils.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
# From piston...
|
||||
|
||||
def coerce_put_post(request):
|
||||
"""
|
||||
Django doesn't particularly understand REST.
|
||||
In case we send data over PUT, Django won't
|
||||
actually look at the data and load it. We need
|
||||
to twist its arm here.
|
||||
|
||||
The try/except abominiation here is due to a bug
|
||||
in mod_python. This should fix it.
|
||||
"""
|
||||
if request.method != 'PUT':
|
||||
return
|
||||
|
||||
# Bug fix: if _load_post_and_files has already been called, for
|
||||
# example by middleware accessing request.POST, the below code to
|
||||
# pretend the request is a POST instead of a PUT will be too late
|
||||
# to make a difference. Also calling _load_post_and_files will result
|
||||
# in the following exception:
|
||||
# AttributeError: You cannot set the upload handlers after the upload has been processed.
|
||||
# The fix is to check for the presence of the _post field which is set
|
||||
# the first time _load_post_and_files is called (both by wsgi.py and
|
||||
# modpython.py). If it's set, the request has to be 'reset' to redo
|
||||
# the query value parsing in POST mode.
|
||||
if hasattr(request, '_post'):
|
||||
del request._post
|
||||
del request._files
|
||||
|
||||
try:
|
||||
request.method = "POST"
|
||||
request._load_post_and_files()
|
||||
request.method = "PUT"
|
||||
except AttributeError:
|
||||
request.META['REQUEST_METHOD'] = 'POST'
|
||||
request._load_post_and_files()
|
||||
request.META['REQUEST_METHOD'] = 'PUT'
|
||||
|
||||
request.PUT = request.POST
|
7
src/testapp/forms.py
Normal file
7
src/testapp/forms.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from django import forms
|
||||
|
||||
class ExampleForm(forms.Form):
|
||||
title = forms.CharField(max_length=100)
|
||||
message = forms.CharField()
|
||||
sender = forms.EmailField()
|
||||
valid = forms.BooleanField(required=False)
|
Loading…
Reference in New Issue
Block a user