【问题标题】:View didn't return HTTPResponse object视图没有返回 HTTPResponse 对象
【发布时间】:2022-11-25 12:23:27
【问题描述】:

我试图按照在线 Django 教程创建一个博客应用程序,当我测试注册页面时,我遇到了一个值错误,指出该视图没有返回 HTTP 响应对象。我尝试了一切,但我找不到答案,因为我不是 Django 专家

在用户应用程序的 views.py 文件中是抛出错误的代码

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages


def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account Created for {username}')
            return redirect('blog-home')
    else:
        form = UserCreationForm()
        return render(request, 'users/register.html', {'form': form})

这是注册模板

{% extends "myblog/base.html" %}
{% block content %}
   <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                    <legend class="border-bottom mb-4">
                        Join Today!
                    </legend>
                    {{ form.as_p }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">
                    Sign Up!
                </button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Already Have an account?
                <a href="#" class="ml-2">Sign In!</a>
            </small>
        </div>
   </div>
{% endblock content%}

这是项目的文件结构 File Structure

【问题讨论】:

标签: django django-forms


【解决方案1】:

如果我们有一个 POST 请求,并且表单无效,则您不会返回任何内容。取消缩进 render 电话,所以:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST, request.FILES)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account Created for {username}')
            return redirect('blog-home')
    else:
        form = UserCreationForm()
    return render(request, 'users/register.html', {'form': form})

【讨论】:

    【解决方案2】:

    也为函数 register 返回一些东西,你只在 if else 条件下返回

    【讨论】:

    • return render(request, 'users/register.html', {'form': form}) 在函数的末尾添加这个 if else (现在我们也为函数 register 返回了一些东西,你只在 if 中返回其他条件)
    • 您可以edit您的答案以向其添加更多内容而不是添加评论...
    【解决方案3】:

    你可以这样写函数......

    def register(request):
        form = UserCreationForm()
        if request.method == 'POST':
            form = UserCreationForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data.get('username')
                messages.success(request, f'Account Created for {username}')
                return redirect('blog-home')
            else:
                form.errors
        context = {'form': form}
        return render(request, 'users/register.html', context)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多