0
私はdjangoを初めて使うので、私のindex.html(1st appのテンプレート)ファイルからフォームappをアカウントアプリ(別のアプリ)のビューに送信します。 PY2つの異なるアプリケーション間でリクエストを送信するときに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}))
毎回アカウント、端末はCSRFトークン見つからないか、インコ、403禁止エラーを返します。起立。私は既にフォームの前に{%csrf_token%}を、そして関数の前に@csrf_exemptを含んでいます。
コードは(ログイン機能はまだ作られている)まだ開発中であり、このレジスタのページでは、フォームタグの中にフォームをレンダリングする必要がviews.py/register_data
私はそのはまだコンソールでこのエラーを示す、両方のフォームの外にフォームタグを追加しました: jquery.min.js:4 POSTはhttp:// localhostを:8000/register_data/403(禁止します) と端末でこの:禁断(CSRFトークン見つからないか、正しくない。):/ register_data/ [22 /月/ 2017年午後01時42分04秒] "POST/register_data/HTTP/1.1" そのことについて申し訳ありません403 2502 – nimish666
、私はdidnのjQueryを使用してデータをPOSTしていることに気付かないでください。 POSTペイロードにCSRFトークンを 'csrfmiddlewaretoken'という名前で送る必要があります。 –
どこに追加すればいいですか? 私が参照できる資料はありますか? クイック返信ありがとうbtw – nimish666