【问题标题】:HttpResponse won't display `post` information when submitting a form提交表单时,HttpResponse 不会显示 `post` 信息
【发布时间】:2017-03-21 15:15:02
【问题描述】:

我正在使用 Django,我正在创建一个允许用户使用 ID 号登录系统的应用程序。所以我有两个视图,一个用于用户登录,另一个用于注册。前一个视图工作得很好,我可以让它显示用户提交的信息。但是我无法获得第二个视图来向用户显示 POST 数据:

from .forms import NameForm, IdForm
from django.shortcuts import render
from django.http import HttpResponse

def sign_in(request):

    if request.method == "POST":
        #here will construct the form with the POST data
        form = NameForm(request.POST)
        #the next part is to check that the information submitted is valid
        if form.is_valid():
            post = form.save()
            post.save()
            return HttpResponse(post)
        else:
            return HttpResponse("Form is invalid")
    else:
        form = NameForm()
    return render(request, 'checkin/base.html', {'form': form})



def sign_up(request):
    if request.method == "POST":
        form = IdForm(request.POST)
        if form.is_valid():
            post = form.save()
            post.save()
            return HttpResponse(post)
        else:
            return HttpResponse('Form is invalid')
    else:
        form = IdForm()
    return render(request, 'checkin/base.html', {'form': form})

基本上我想回复“谢谢,您的身份证号是:post”。

这是我的模型的类:

from __future__ import unicode_literals

from django.db import models
from django import forms
from django.forms import ModelForm

# Create your models here.

class Question(models.Model):
    question_text = models.CharField("What is your ID?", max_length=200)

    id_text = models.CharField("Enter a new identification          
    number",max_length=200, null=True)

    def __str__(self):
        return self.question_text 

这是两个视图的表单类:

from django.forms import ModelForm
from .models import Question

#put the form here

class NameForm(ModelForm):
    class Meta:
        model = Question
        fields = ['question_text']

class IdForm(ModelForm):
    class Meta:
        model = Question
        fields = ['id_text']

【问题讨论】:

    标签: python django forms post


    【解决方案1】:

    将 POST 数据显示为对用户的响应通常是不可接受的。那不是 HTML,只是普通用户无法理解的字典。在 Django(实际上几乎所有 Web 框架)中使用表单的标准方式是向用户显示表单验证错误,以便他可以纠正它。

    正确的方法

    def sign_up(request):
        if request.method == "POST":
            form = IdForm(request.POST)
            if form.is_valid():
                post = form.save()
                post.save()
                return HttpResponseRedirect('/succes_url')
        else:
            form = IdForm()
        return render(request, 'checkin/base.html', {'form': form})
    

    【讨论】:

    • 好的,感谢您的提示,但是在验证后如何向用户显示他们的输入?即“感谢您注册您的 ID 是:”
    • 创建一个与POST 数据相等的单独变量并改为显示它对我来说有意义吗?
    • 好吧,用户已经知道他输入了什么,所以没有必要告诉他!但是,如果您认为这很重要,请将其放入会话中并在下一页中弹出。或者更好地使用 django 消息
    • 好的,非常感谢,我会研究 Django 消息。但是“将其放入会话中”是什么意思?
    • 或者httpresponse指的是什么?
    【解决方案2】:

    问题在于 return HttpResponse(post) 行,您将整个表单传递给 HttpResponse,但正如您所提到的,您只需要 id_text 字段强>IdForm。 所以更新后的代码应该是:

    def sign_up(request):
        if request.method == "POST":
            form = IdForm(request.POST)
            if form.is_valid():
                post = form.save()
                post.save()
                id = post.id_text
                return HttpResponse('thank you, your ID number is: '+id)
            else:
                return HttpResponse('Form is invalid')
        else:
            form = IdForm()
        return render(request, 'checkin/base.html', {'form': form})
    

    【讨论】:

    • 谢谢你,但是为什么在httpresponse 中发布整个表单对我的其他观点有用?
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多