これは教育プロジェクトであり、生産用ではありません。これの一部としてユーザー ログインを行うつもりはありませんでした。
ユーザーのログインなしで、CSRF トークンを使用して Django への POST 呼び出しを行うことはできますか? jQueryを使わずにこれを行うことはできますか? 私はここで深みがなく、確かにいくつかの概念を混同しています。
JavaScript 側では、このredux-csrfパッケージを見つけました。POST
Axios を使用してアクションと組み合わせる方法がわかりません。
export const addJob = (title, hourly, tax) => {
console.log("Trying to addJob: ", title, hourly, tax)
return (dispatch) => {
dispatch(requestData("addJob"));
return axios({
method: 'post',
url: "/api/jobs",
data: {
"title": title,
"hourly_rate": hourly,
"tax_rate": tax
},
responseType: 'json'
})
.then((response) => {
dispatch(receiveData(response.data, "addJob"));
})
.catch((response) => {
dispatch(receiveError(response.data, "addJob"));
})
}
};
Django側では、CSRFに関するこのドキュメントと、クラスベースのビューの一般的な操作に関するこのドキュメントを読みました。
これまでの私の見解は次のとおりです。
class JobsHandler(View):
def get(self, request):
with open('./data/jobs.json', 'r') as f:
jobs = json.loads(f.read())
return HttpResponse(json.dumps(jobs))
def post(self, request):
with open('./data/jobs.json', 'r') as f:
jobs = json.loads(f.read())
new_job = request.to_dict()
id = new_job['title']
jobs[id] = new_job
with open('./data/jobs.json', 'w') as f:
f.write(json.dumps(jobs, indent=4, separators=(',', ': ')))
return HttpResponse(json.dumps(jobs[id]))
csrf_exempt
今のところこれを心配する必要がないようにデコレータを使用してみましたが、それがどのように機能するかはわかりません。
{% csrf_token %}
テンプレートに追加しました。
これは私のgetCookie
方法です(Djangoのドキュメントから盗まれました):
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
Axios CSRF情報を変更する必要があることを読みました:
var axios = require("axios");
var axiosDefaults = require("axios/lib/defaults");
axiosDefaults.xsrfCookieName = "csrftoken"
axiosDefaults.xsrfHeaderName = "X-CSRFToken"
実際のトークン、呼び出しから取得した値をどこに貼り付けますgetCookie('csrftoken')
か?