javascript - 如何在不重新加载页面的情况下显示 django 消息?
问题描述
我正在构建一个弹出式注册表单。并且不想在出现某些错误或成功消息时重新加载页面。因为那样弹出表单将被关闭。我只想在那里显示消息而不重新加载页面。
这就是我到目前为止所做的
视图.py
def signup(request):
if request.method == "POST":
username = request.POST["username"]
email = request.POST["email"].lower()
password = request.POST["password"]
password2 = request.POST["password2"]
try:
if password2 != password:
messages.error(request, "password didn't match")
elif len(password) < 6:
messages.error(request, "password is too small.")
elif User.objects.get(email=email):
messages.error(request, "user with this email already exists")
except:
if not (User.objects.filter(username=username).exists()):
user = User.objects.create_user(username=username, email=email)
user.set_password(password)
user.save()
messages.success(request, "User Created")
else:
messages.error(request, "Looks like username already exists")
django_messages = []
for message in messages.get_messages(request):
django_messages.append({
"level": message.level,
"message": message.message,
"tags": message.tags,
})
data = {}
data['messages'] = django_messages
return HttpResponse(json.dumps(data), content_type="application/json")
return redirect(request.META['HTTP_REFERER'])
ajax代码
<script type="text/javascript">
$(document).on('submit','#signup_form',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:"{% url 'auth_signup' %}",
data:{
'username':$('#signup_username').val()
'email':$('#signup_email').val(),
'password':$('#signup_password').val(),
'password2':$('#signup_password2').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success:function(data){
update_messages(data.messages);;
$(".message").show();
},
error:function(data){
update_messages(data.messages);
(".message").show();
}
});
});
<script type="text/javascript">
function update_messages(messages){
$("#msgs").html("");
$.each(messages, function (i, m) {
$("#msgs").append("<div class='alert "+m.tags+"''><button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>×</span></button>"+m.message+"</div>");});}</script>
当我按下提交按钮时。它应该在那里显示错误或成功消息。但是页面转到 url http://127.0.0.1:8000/signup 并且只显示这个 json 字符串。
{“消息”:[{“级别”:40,“消息”:“密码不匹配”,“标签”:“警报危险”}]}
解决方案
推荐阅读
- docker - 从 swarm 中删除已终止的实例(管理器),并恢复 swarm 状态
- reactjs - 使用 useEffect 反应 init carousel jQuery lib
- flutter - Flutter:如何增加文本中标签“\ t”的缩进宽度
- python-3.x - 在 Jupyter 笔记本中导入 Pytorch 时遇到问题
- javascript - 如何仅使用“普通” html、CSS 和 Javascript 使按钮出现在滚动条上
- python - 包含混合数据的列
- typescript - 为什么 lib.es5.d.ts 有 Promise?
- gnuplot - 如何在gnuplot中用线条绘制误差线?
- jquery - 如何将 Chrome 扩展本地化为网上应用店中不可用的语言?
- amazon-web-services - AWS CDK - StepFunction - 在传递到下一步之前修改输入