我遇到了问题。我想显示在表单中找到的任何验证错误,例如用户不退出,或者在登录/注册表单上显示错误的密码等而不重新加载页面。
我能够提交表单但找不到在表单中显示错误消息的方法。
请帮忙。
答案 0 :(得分:1)
如果您计划在没有页面重新加载的情况下只有少数地方进行此类交互,则可以避免使用Django Rest Framework和Ember / Angular / React等。
request.is_ajax()
方法识别AJAX请求,并且您可以验证表单如果你计划拥有很多互动功能,你应该考虑使用Angular / Ember / React并使用Django构建一个API,就像你的问题的评论一样。
答案 1 :(得分:1)
您必须覆盖默认登录视图并测试request.is_ajax
。这是未经测试的,任何故障都留给你作为练习。在您的登录网址上放置这样的视图:
from django.contrib.auth.views import login as original_login
from django.conf import settings
from django.shortcuts import resolve_url
from django.contrib.auth import REDIRECT_FIELD_NAME, \
login as auth_login
import json
def custom_login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
current_app=None, extra_context=None):
if request.method != 'POST' or not request.is_ajax():
return original_login(request, template_name,
redirect_field, authentication_form, current_app,
extra_context)
form = AuthenticationForm(request.POST)
if form.is_valid():
auth_login(request, form.get_user())
result = {
"status": "OK",
"url": resolve_url(settings.LOGIN_REDIRECT_URL)
}
else:
result = {
"status": "error",
"errors": form.errors
}
return HttpResponse(json.dumps(result),
mime_type="application/json")
如果请求不是POST或者是POST但不是AJAX,则返回原始登录视图,否则返回描述具有相应MIME类型的结果的JSON对象。