Django:HttpResponseRedirect 不起作用

2023-11-25

我是 Python/Django 和整体编程的新手。我需要有关 HttpResponseRedirect 的帮助,因为它在我的登录视图中不起作用。它确实可以在我的主视图文件中工作,但不是我想要的方式。

我没有重定向到所需的页面(“/”),而是只在同一页面上看到此内容:

内容类型:text/html;字符集=utf-8 位置:/

用户实际上已登录,但仍停留在同一页面上。因此,如果我手动转到所需的页面,我会看到我已登录。

这是相关的代码片段。我到处都用我自己的观点。我希望通过这种方式进行练习和更好的理解。

Urls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin
from backend import settings
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^login/', 'backend.views.login', name = 'login'),
    url(r'^logout/', 'backend.views.logout', name = 'logout'),
    url(r'^$', 'backend.views.dash', name = 'dash'),
    url(r'^admin/', include(admin.site.urls)),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()

Views.py

from dashboard.dashviews import left, right, topright
from authentication.authviews import LoginView, LogoutView
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required

@login_required(login_url='/login/')
def dash(request):
    return render(request, 'dash_template.html', 
        {'left': left.dash_left(request), 
         'right': right.dash_right(), 
        'topright': topright.top_right(request)})

def login(request):
    if not request.user.is_authenticated():
        return render(request, 'login.html', {'login': LoginView.login_view(request)})
    else:
        return HttpResponseRedirect('/')

def logout(request):
    return render(request, 'logout.html', {'logout': LogoutView.logout_view(request)}) and HttpResponseRedirect('/login/')

登录视图.py

from django.contrib import auth
from django.http import HttpResponseRedirect

def login_view(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username=username, password=password)
    if user is not None and user.is_active:
        # Correct password, and the user is marked "active"
        auth.login(request, user)
        # Redirect to dashboard
        return HttpResponseRedirect('/')
    else:
    # Show a message     
        return 'Please enter your username and password below.'

login.html - 简单表单

<center>

<p>{{ login }}</p>

  {% if form.errors %}
    <p class="error">Sorry, that's not a valid username or password</p>
  {% endif %}


  <form action="./" method="post">
        <table border="0">
    <tr>
    <td>
    <label for="username">Username:</label>
    </td>
    <td>
    <input type="text" name="username" value="" id="username">
    </td>
    </tr>
    <tr>
    <td>
    <label for="password">Password:</label>
    </td>
    <td>
    <input type="password" name="password" value="" id="password">
    </td>
    </tr>
    </table>
    <input type="submit" value="login" />
    <input type="hidden" name="next" value="/" />
    {% csrf_token %}
  </form>

</center>

我按照 Django 书籍教程进行操作,根据它,一切都应该可以正常工作。正如您所看到的,我还尝试在表单中使用“下一个”隐藏字段,但这也不起作用。任何帮助,将不胜感激。我想知道我在这里缺少什么。谢谢!


您在 html 中看到“Content-Type: text/html; charset=utf-8 Location: /”的原因是您返回 HttpResponse 对象作为要在响应中呈现的上下文数据的一部分,而不是作为实际反应。你的注销看起来也有点奇怪。但要使用你目前拥有的东西:

改变你的看法.py

if not request.user.is_authenticated():
    # LoginView.login_view will return a HttpResponse object
    return LoginView.login_view(request)
else:
    ...

然后更改 LoginView.login 中的视图以始终返回您想要的 Response 对象(重定向或您想要呈现的页面)

def login_view(request):
    # if the request method is POST the process the POST values otherwise just render the page
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is not None and user.is_active:
            # Correct password, and the user is marked "active"
            auth.login(request, user)
            # Redirect to dashboard
           return HttpResponseRedirect('/')
        else:
            # Show a message     
            err_msg = 'Please enter your username and password below.'
    return render(request, 'login.html', {'login': err_msg})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:HttpResponseRedirect 不起作用 的相关文章

随机推荐

  • 打开项目时出现“无法创建 C# 2017 编译器”错误消息

    我有 Visual Studio 2017 社区版 我有一个使用 Visual Studio 2015 创建的 C 项目 当我尝试在 VS 2017 中打开该项目时 出现错误消息提示 微软 Visual Studio 无法打开项目 data
  • 对于数组,在javascript中使用map()和reduce()代替forEach()是否更有效?

    1 众所周知 map 和reduce 没有副作用 如今 我们的手机也有了多核 那么使用它们是不是更有效率呢 2 另一方面 在大多数浏览器上只有1个线程供js执行 因此map 和reduce 是为服务器端脚本准备的吗 我今天刚刚测试了这一点
  • 来自 UIImage 的数据 URL / PNG

    我有一个带有 UIImage 的 iPhone 程序 此 UIImage 需要传输到 UIWebView 中的 javascript Image 对象 我想这可以通过使用我发送到 UIWebView 的数据 url 来完成 如下所示 wvi
  • 在 if 语句中使用 && 运算符

    我有三个变量 VAR1 file1 VAR2 file2 VAR3 file3 如何使用和 if 语句中的 运算符如下所示 if f VAR1 f VAR2 f VAR3 then fi 当我编写这段代码时 它给出了错误 正确的方法是什么
  • 获取 lambda 表达式的 MethodInfo

    我知道我问的很奇怪 但只是为了好玩 是否有可能得到MethodInfo对于 lambda 表达式 我正在追求这样的事情 Func
  • iOS 5 中如何防止 Core Data 重复?

    我遇到了问题 周末我一直在做一个项目 我从 web 服务中提取一个大的 xml 它基本上有 3 层 客户 经理 员工 都是分层的 因此 应用程序第一次运行时 它会提取此 xml 并对其进行解析 并创建 3 个相关实体 客户 经理和员工 中的
  • unittest.py 与trace.py 不能很好地配合 - 为什么?

    哇 今晚我发现 Python 单元测试是使用unittest模块不能很好地进行覆盖率分析trace模块 这是最简单的单元测试 在foobar py import unittest class Tester unittest TestCase
  • 初始化空ByteArray

    如何在 Kotlin 中初始化一个空的 ByteArray 每当我尝试这样做时 val asdfasdf ByteArray 当我稍后尝试使用 asdfasdf 时 我被告知需要初始化它 mVisualizer getWaveForm as
  • 我可以使用什么工具在浏览器中测试 :contains() CSS3 伪类?

    我正在尝试开发与 Selenium 一起使用的 CSS 选择器 我特别想使用伪类 contains 尽管 W3 有一个带有 contains 的 CSS3 草案 但最终版本似乎并未包含它 我正在使用 Chrome 的工具来帮助我检查 CSS
  • 使用 PyGtk 时 GUI 未从另一个线程更新

    我正在使用 PyGTK 构建 GUI 应用程序 我想从另一个线程更新 textview 小部件 但每次我尝试更新时该小部件都没有更新 我应该怎么做才能获得可靠的 GUI 更新 GTK 不是线程安全的 因此您不应简单地从其他线程调用 GUI
  • 在 Android Activity 中打开网页时出现 net::ERR_ACCESS_DENIED Android 错误 [重复]

    这个问题在这里已经有答案了 打开 Android 活动时 Android 网页显示 net ERR ACCESS DENIED 嵌入网页标签 我尝试在 Android Manifest 中提供权限
  • 如何在同一个shell中执行bash脚本

    我有一个 bash 脚本 它调用三个不同的命令 并且执行必须在一个 shell 中进行 我通过在每个命令后添加 来得到它 如下所示 CMD1 CMD2 CMD3 现在我需要的是 假设我在 MAC 机器上打开一个终端 所有命令都应该在打开的
  • 如何强制 go mod 接受声明其路径与其 go.mod 不同的模块?

    当我跑步时go mod tidy 它破坏了 因为我的项目导入的包使用路径导入了另一个包github com coreos bbolt 但是当它从此路径获取包时go mod说它的路径是go etcd io bbolt 问题是导入包和导入包都是
  • 如何以编程方式读取 MSI 文件内的属性?

    有没有办法读取里面的属性MSI file 例如 给定一个名为测试包 msi 我需要找到 productName PackageCode version 我将把它与 WMI 卸载一起使用 string objPath string Forma
  • 为什么在放弃泛型运算符时无法推断类型[重复]

    这个问题在这里已经有答案了 我读到 从 Java 7 开始 像第一个语句一样在右侧指定类型来创建集合是不好的风格 因为编译器可以从左侧推断类型 List
  • 方形拼图解决方案

    Question given an integer number n print the numbers from 1 up to n2 like this n 4 结果是 01 02 03 04 12 13 14 05 11 16 15
  • 函数调用中的 C++ 临时对象生命周期

    当我们通过原始指针或引用将临时智能指针管理的对象传递给函数时 标准是否保证该对象的生存期将延长到函数的生存期 include
  • JQuery JEditable - 如何禁用点击编辑

    我想知道您是否可以停止点击时编辑文本 我有一个单独的编辑按钮来使文本可编辑 这是我希望用户能够编辑文本的唯一方法 因此想要关闭单击编辑吗 有任何想法吗 布里特是对的 添加一个自定义事件 然后用按钮触发它 这是一些代码来解释它 自定义事件 i
  • 使用 N-API 将数据流式传输到 Node.js C++ 插件

    我正在为 NodeJS 构建一个 C 插件 我想将数据从 C 异步流式传输到 Node 我找到了这篇文章 https nodeaddons com streaming data into a node js c addon 然而 我想使用
  • Django:HttpResponseRedirect 不起作用

    我是 Python Django 和整体编程的新手 我需要有关 HttpResponseRedirect 的帮助 因为它在我的登录视图中不起作用 它确实可以在我的主视图文件中工作 但不是我想要的方式 我没有重定向到所需的页面 而是只在同一页