DJango HttpResponseRedirect未将“请求”传递给函数

2024-10-03 17:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是DJango登录/身份验证功能。我已经用一个使用Extending The Existing User Model方法的概要文件扩展了它。在

“Profile”中有一个变量,名为restrole。在下面的代码中,restrole用于控制用户看到的下一个屏幕(以及其中的数据):

def user_login(request):

if request.method == 'POST':
    # First get the username and password supplied
    username = request.POST.get('username')
    password = request.POST.get('password')

# Django's built-in authentication function:
user = authenticate(username=username, password=password)

    if user:
        # Check it the account is active
        if user.is_active:

            # Log the user in.
            login(request, user)

            myprofile = user.userprofileinfo
            restrole = myprofile.restrole

        if  restrole == 1:
            return HttpResponseRedirect(reverse('authinduction:induct-owner'))
        elif restrole == 2:
            return HttpResponseRedirect(reverse('authinduction:induct-office'))
        elif restrole == 3:
            return HttpResponseRedirect(reverse('authinduction:induct-customer'))
        elif restrole == 4:
            return HttpResponseRedirect(reverse('authinduction:induct-field-work'))
        else:
            return HttpResponse("Unrecognized Role") 

这部分很好用

我可以从“request”变量中获取数据

^{pr2}$

问题

当我执行其中一个分支时:

        if  restrole == 1:
            return HttpResponseRedirect(reverse('authinduction:induct-owner'))

它会转到正确的函数,但“请求”似乎没有任何相关的数据。获取“username”会导致值“None”

from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from authinduction.models import Mstrauthownerrdx
from django.contrib.auth.models import User

def inductowner(request):

    username = request.POST.get('username')  <<< does NOT work, returns "None"
    user = User.objects.get(username=username) <<< causes a DoNotExist error here

解决这个问题的最好办法是什么?在

TIA公司

更新

@Alasdair-谢谢你的回复。那就成功了!我注意到表单本身访问用户登录信息如下:

<input type="text" name="username" placeholder="Enter Your Logon Info">

如上所述,要获得用户名(当你写文章的时候),你需要这样做

username = request.POST.get('username')

在所有这些,我一直看到“用户名”,但是-为了解决问题,一个用户”请求.用户". 为什么会这样?我问是因为我从没想过要用请求.用户“获取信息。如果有的话,我会用“请求.用户名““


Tags: 用户fromgetreturnifrequestusernamepassword
1条回答
网友
1楼 · 发布于 2024-10-03 17:21:28

当您返回重定向响应时,Django会对该URL执行GET请求,因此不会将POST数据发送到新的URL。在

因为您已经在user_login中登录了该用户,所以我将在下一个视图中从request中获取该用户。在

from django.contrib.auth.decorators import login_required

@login_required
def inductowner(request):
    user = request.user
    ...

login_required确保只有登录的用户才能访问视图,因此可以阻止匿名用户直接访问inductowner视图。在

相关问题 更多 >