私はこのすべての検証がどのように機能するかを理解しようとしていますが、コツをつかんでいません。djangoprojectのほんの少しの例を読みましたが、概念とすべてがどのように結び付けられているかが欠けています。
私のコードを見て、物事がどうあるべきか、そしていくつかの説明を再配置していただければ、それは素晴らしいことです!
だから私は非常に簡単なことをしたいのです。メールのみでログインしてください。ユーザーがメールアドレスを入力したら、データベースにあるかどうかを確認し、ある場合はログインします。そうでない場合は、「ユーザーはすでにデータベースにあります」というエラーを発生させ、この人が/registerにアクセスすることを提案します。
だから私が現在持っているのは:
view.py:
def emailLogin(request, backend, extra_context=None, initial={}):
form = EmailLoginForm(initial=initial)
if request.method == 'POST':
form = EmailLoginForm(initial=initial, data=request.POST)
if form.is_valid():
user = form.do_save()
_no_pass_login(request, user) # my custom login
return redirect('/')
else:
print ('not valid')
return render_jinja(request, 'registration/email_login_form.html',
type="register",
form = form
)
forms.py:
class EmailLoginForm(forms.Form):
email = forms.EmailField()
def do_save(self):
try:
u = User.objects.get(email=self.cleaned_data['email'])
except :
raise forms.ValidationError("Already in DB")
return u
つまり、要点は、概念が欠落しているということです。検証エラーはどこで発生する必要がありますか、ビューまたはフォームですか?どこに上げられますか?誰がそれをキャッチしますか?各ファイルに何をインポートする必要があるかなど。
これはそれほど難しいことではないはずですが、私は今完全に迷子になっています。コードを分析して機能するように変更できる例がないので、ここにいます。