ので、コードは非常に簡単です:403ログイン後のページリフレッシュでCSRFエラー()Django?
views.py
@csrf_protect
def index(request):
global userPersonalInformation
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
profile = Profile.objects.get(username=username)
return render(request, 'main/profile.html', {"profile":profile})
else:
if CheckUser(username, password):
user = User.objects.create_user(request.POST['username'], userPersonalInformation['email'], request.POST['password'])
user.save()
profile = Profile.objects.create(username=username,school=userPersonalInformation['school'],img=userPersonalInformation['img'], birthyear=userPersonalInformation['birthyear'],city=userPersonalInformation['city'],solved=progress['denominator'])
profile.save()
login(request, user)
return render(request, 'main/profile.html', {"profile": profile })
else:
context = {"form": Userform(request.POST or None), }
return render(request, 'main/login.html', context)
else:
form = Userform()
context = {"form": form, }
return render(request, 'main/login.html', context)
profile.html
{% block title %}Profile | {{ user.first_name }}
そして、これは、プロフィール表示|ユーザー名はタイトルバーに正しく表示されます。つまり、ユーザーがログインしている。
Settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
urls.py /メイン
from django.conf.urls import url
from . import views
app_name = 'main'
urlpatterns = [
url(r'^$', views.index, name='index'),
]
login.htmlと
{% extends "main/base.html" %}
{% block title %}Sign in{% endblock %}
{% block body %}
<div class="container">
<form method="post" action="" class="form-signin">
<h2 class="form-signin-heading">Please sign in</h2>
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-primary" type="submit">Sign in</button>
</form>
</div>
{% endblock %}
form.py
from django import forms
from django.contrib.auth.models import User
class Userform(forms.Form):
class Meta:
model= User
fields = ('username', 'password')
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput())
チェックユーザー
CheckUser()
return True
は、今の問題は、私はボタンで記号をクリックしたときに、私が表示されているすべての情報をプロフィールページの午前です。しかし、私がリフレッシュした瞬間に、私はこのエラーを受け取ります:
Forbidden (403)
CSRF verification failed. Request aborted.
私を助けてください。プロファイルは、データベースの中にuserの内容を持つ別のテーブルです。 userとprofileの両方のテーブルの主キーはユーザー名です。私がクロールしている別のウェブサイトの有効なユーザーである場合、CheckUser関数。彼がいる場合は、彼の詳細をデータベースに保存し、userPersonalInformationはグローバル辞書です。
Djangoのバージョン1.10
を試してみてくださいしかし、どのように、私はこの 'profile'を渡します:あなたのURLで
:
次のようなリダイレクト機能を使用することができますリダイレクト機能? –
プロファイルビューの 'url'または' url_name'だけをプロファイル関数に渡す必要があります。 – v1k45
更新された回答を確認してください。 – v1k45