【发布时间】:2017-08-28 17:10:06
【问题描述】:
我正在尝试使用 ajax 从 django 模板表单发送 pdf 文件,并使用 djangorestframwork 在views.py 中获取数据。适用于普通数据,但在这种情况下我得到 403 错误
forms.py
class TicketForm(forms.ModelForm):
class Meta:
model = Ticket
fields = ('upload',)
widgets = {
'upload': forms.FileInput(
attrs={'id': 'fileinput', 'required': True, 'placeholder': 'Say something...'}
),
}
模板和 jQuery/js:
<form method="post" enctype="multipart/form-data" class="pdf_form">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" class="">Save</input>
</form>
<script type="text/javascript">
$(function() {
function upload() {
alert($('#fileinput').val())
$.ajax({
url: '/upload_ticket/',
type : "POST", // http method
dataType: 'json',
data : { 'file' : $('#fileinput').val() }, // data sent with the post request
// handle a successful response
success : function() {
alert('succes');
},
// handle a non-successful response
error : function() {
alert('error');
}
});
};
$('.pdf_form').on('submit', function(e){
e.preventDefault();
alert('it works!');
console.log("form submitted!") // sanity check
upload();
});
});
</script>
urls.py:
url(r'^upload_ticket/$', views.upload_ticket),
views.py:
@api_view(['POST', ])
def upload_ticket(request):
return Response(request.data)
我已经调试了几个小时,但找不到错误。我的实施有什么问题?
POST /upload_ticket/ HTTP/1.1" 403 58
【问题讨论】:
-
我相信您可能需要在您的 ajax 数据字典中传递
csrfmiddlewaretoken: "{{ csrf_token }}"。 -
@jape 是的。我不知道 djangp 在以这种方式发送数据时提供了针对 csrf 的保护
-
我很高兴你至少修好了它!祝你好运:)
标签: jquery python ajax django django-rest-framework