2
我請求一個URL編碼時使用Django一個項目,我得到一個奇怪不允許Mthod(405)。 我是什麼樣的錯誤,但這裏是我的實現和細節:
urls.py
url(r'^join/',
csrf_protect(UserSignUp.as_view()),
name='sgn_up'),
views.py
class UserSignUp(View):
def post(self, request):
resp_data = {}
try:
print 'sign up================================================'
x = MyUser.objects.get(email=request.POST['email'])
resp_data['message'] = 'signed up before'
return HttpResponse(json.dumps(resp_data), content_type="application/json")
except MyUser.DoesNotExist:
user = MyUser(email=request.POST['email'],
password=request.POST['password'],
first_name=request.POST['firstName'],
last_name=request.POST['lastName']
)
user.save()
#print 'errorize'
user.set_password(request.POST['password'])
user.save()
resp_data[
'message'] = 'please refer to your email for complete registrations'
return HttpResponse(json.dumps(resp_data), content_type="application/json")
HTML/JS
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
var csrftoken = $('input[name="csrfmiddlewaretoken"]').prop('value');
function sameOrigin(url) {
var host = document.location.host; // host + port
var protocol = document.location.protocol;
var sr_origin = '//' + host;
var origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
function ajaxSignIn(){
$.ajax({
url:"{% url 'sgn_in' %}",
type: "POST",
data: $('#sgn-in-form').serialize(),
dataType : "json",
success: function(json){location.reload();},
error: function(xhr, status) {}
});
}
function ajaxSignUp(){
$.ajax({
url:"{% url 'sgn_up' %}",
type: "POST",
data: $('#sgn-up-form').serialize(),
dataType : "json",
success: function(json){location.reload();},
error: function(xhr, status) {}
});
}
現在我發送一個ajax請求(我已經包含csrftoken)和post方法,但是我得到了一個405!
我還有其他的ajax post請求,他們也可以使用csrftokens bur(例如登錄)!
最有趣的是,當我使用Chrome瀏覽器時,它給出了錯誤,並且用戶數據也保存在數據庫中!!!(這意味着模型後期方法起作用!!!)但是當使用Firefox時只給錯誤!
有沒有人遇到過這樣的問題?我搜索了很多,但沒有發現任何幫助!
謝謝
您是否確定要發送POST請求? –
是的,絕對。我已經更新了我的問題以查看html/js。 更多的重點:我的ajaxSignIn運作良好,但註冊掛斷,更愚蠢:從不同瀏覽器的請求中看到不同的功能! – Mahdi