2017-03-21 4 views
0

django를 처음 사용하면서 index.html (첫 번째 응용 프로그램의 서식 파일)에서 양식 응용 프로그램의 다른 응용 프로그램보기로 양식 데이터를 보내고 있습니다. 평CSRF 토큰이 누락되었거나 잘못되었습니다. 두 개의 서로 다른 응용 프로그램에서 요청을 전송할 때

index.html을 -이 app01/템플릿

<!DOCTYPE html> 
<html> 
<head> 
    <title>hello</title> 

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 


    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 

<style type="text/css"> 
    body{ 
     background-color: 'lightblue'; 
    } 
</style> 
</head> 

<body> 
<nav class="navbar navbar-inverse bg-faded"> 
<a class="navbar-brand" href="#about"> 
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Cyno_Small_Logo_(Aug._2015).png/240px-Cyno_Small_Logo_(Aug._2015).png" width="30" height="30" > 

</a> 
<div class="col-md-2 bg-warning"><h3>Quizapp</h3></div> 

<div class="container off col-md-offset-2"> 
    <ul class="nav nav-tabs"> 
     <li><a data-toggle="tab" href="#regtab">New User? Register here!</a></li> 
     <li><a data-toggle="tab" href="#logtab">Already have an account? Login!</a></li> 
    </ul> 
</nav> 
    <div class="tab-content"> 
     <div id="regtab" class="tab-pane fade text-primary"> 


    {% csrf_token %} 

     {{ rform }} 



    <button id="rbtn" type="button" class="btn btn-primary btn-lg ">Register!</button> 
     </div> 
     <div id="logtab" class="tab-pane fade text-success" data- loading-text="Registering"> 

    {% csrf_token %} 

     {{ lform.as_p }} 



     <button id="lbtn" type="button" class="btn btn-primary btn-lg   " data-loading-text="Logging in" >Login!</button> 
     </div> 
    </div> 
</div> 




<script type="text/javascript"> 

$('#rbtn').click(function(){ 
    var form_data = { 
     'username' : $('#id_username').val(), 
     'password' : $('#id_password').val(), 
     'name' : $('#id_name').val() 
    } 
    $.post('/register_data/',form_data,function (data, status){ 
     var dt = JSON.parse(data); 
     var reg_status = dt.data.status; 
     if(reg_status == 'success'){ 
      alert("registered! click Ok to go to home"); 
      window.location = '/'; 
     } 
     else{ 
      alert("check form bro!"); 
     } 

    }); 
}); 

</script> 
</body> 

</html> 

views.py이 -

from django.shortcuts import render,redirect  
from django.http import HttpResponse 
from django.views.decorators.csrf import csrf_exempt  
from app01.models import LoginForm,RegisterForm 
from django.contrib.auth import authenticate, login, logout 
from django.contrib.auth.decorators import login_required 
import json 
@csrf_exempt 
def register_data(request): 
    resp = { 
     'status': '' 
    } 

    if not request.method == 'POST': 
     resp['status'] = 'post req pls' 
     return HttpResponse(json.dumps({'data': resp})) 

    frm = RegisterForm(request.POST) 

    if frm.is_valid(): 

     uname = frm.cleaned_data['username'] 
     ps = frm.cleaned_data['password'] 
     name = frm.cleaned_data['name'] 
     try: 
      usr= User(username=uname) 
      usr.set_password(ps) 
      usr.save() 


     except: 
      resps['status']='user already exists' 
      return HttpResponse(json.dumps({'data':resp})) 

     myusr = MyUser(user=usr,name=name) 
     myusr.save() 
     return redirect('/') 
     resp['status'] = 'success' 
     return HttpResponse(json.dumps({'data':resp})) 

매번 내가 등록 버튼을 클릭하여 계정, 단말기 (403) 금단의 오류를 반환, CSRF이 없거나 INCO 토큰 직립. 양식 앞에 {% csrf_token %}이 (가) 이미 포함되어 있으며 함수 앞에 @csrf_exempt도 있습니다.

코드는이 레지스터 페이지

답변

1

당신은 양식 태그 내에서 양식을 렌더링하는 데 필요한 views.py/register_data에 요청을 보낼 때까지, 나는 끼 었어 (로그인 기능은 아직 만들 수) 아직 개발 중입니다. jquery.min.js : 4 POST에 http : 나는 두 형태, 콘솔에서의 여전히 보여주는이 오류 이외의 양식 태그를 추가 https://docs.djangoproject.com/en/1.10/topics/forms/#the-template

<form> 
    {% csrf_token %} 
    {{ rform }} 
</form> 
<form> 
    {% csrf_token %} 
    {{ lform.as_p }} 
</form> 
+0

다음 문서를 참조하십시오 // localhost를 :/register_data/403 8000 (금지) 및 단말기의 다음 내용 : 금지됨 (CSRF 토큰 누락 또는 올바르지 않음) :/register_data/ [22/Mar/2017 13:42:04] "POST/register_data/HTTP/1.1"403 2502 – nimish666

+0

죄송합니다. jQuery를 사용하여 데이터를 POST했음을 알 수 없습니다. POST 페이로드에 CSRF 토큰을'csrfmiddlewaretoken'이라는 이름으로 보내야합니다. –

+0

정확히 어떻게 추가해야합니까? 내가 참조 할 수있는 문서가 있습니까? 답장을 보내 주셔서 감사합니다. btw – nimish666