【问题标题】:Django: how to send argument in HtpResponseRedirectDjango:如何在 HtpResponseRedirect 中发送参数
【发布时间】:2016-12-27 23:54:53
【问题描述】:

Views.py

from django.shortcuts import render
from django.template.context_processors import csrf
from  django.http import HttpResponseRedirect
from  django.shortcuts import render_to_response

from .models import studentDetails
from .forms import loginForm

# Create your views here.


def login(request):
    c = {}
    c.update(csrf(request))
    return render(request, "login.html", c)

def auth_view(request):
    username = request.POST.get("username", "")
    password = request.POST.get("password", "")

    q = studentDetails.objects.get(name=username)

    if q.password==password:
        return  HttpResponseRedirect("/student/accounts/loggedin")

    return  HttpResponseRedirect("/studemt/accounts/invalid")



def loggedin(request):
    username = request.GET.get("username")
    return  render(request, "loggedin.html", {"full_name": username})


def invalid(request):
    return  render(request, "invalid_login.html")


def logout(request):
    return  render(request, "logout.html")

Urls.py

from django.conf.urls import url
from django.contrib import admin
from .views import (
    login,
    auth_view,
    loggedin,
    logout
    )


urlpatterns = [
    url(r"^accounts/login/$", login ,  name="login"),
    url(r"^accounts/auth/$", auth_view ,name="auth_view"),
    url(r"^accounts/loggedin/$", loggedin , name="loggedin"),
    url(r"^accounts/logout/$", logout, name="logout"),

]

我想将用户名从 auth_view 发送到登录视图,但我不知道该怎么做。 我用过username = request.GET.get("username"),但它不起作用。 我还想在 url 中显示用户名,使其看起来像 /student/username/ 其中用户名将随着不同的用户登录而改变。

【问题讨论】:

标签: python django django-templates django-views django-urls


【解决方案1】:

你应该先在url中传递参数:

url(r'^student/(?P<username>\w+)/$', views.userpage, name='userpage)

但最好使用pk 字段或带有name + pk 的东西作为url 参数,因为用户名可以重复。
现在您可以在视图中传递此参数并且不要硬核 url,而是使用带有 url 名称的reverse。

def auth_view(request):
    username = request.POST.get("username", "")
    password = request.POST.get("password", "")

    q = studentDetails.objects.get(name=username)

    if q.password==password:
        return  HttpResponseRedirect(reverse('userpage', args=[q.username]))

    return  HttpResponseRedirect(reverse('invalid'))

【讨论】:

  • 我有相应的更改视图和网址,但它不起作用 错误: Reverse for 'loggedin' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 更改网址: url(r'^(?P&lt;username&gt;)/$', loggedin, name='loggedin'), 更改视图.py def auth_view(request): username = request.POST.get("username", "") password = request.POST.get("password", "") q = studentDetails.objects.get(name=username) if q.password==password: return HttpResponseRedirect(reverse('loggedin'), args=[q.username]) return HttpResponseRedirect("/studemt/accounts/invalid")
  • 啊,是的,reverse 函数中有错字,args 必须位于 reverse
  • 回溯说了什么?
  • NoReverseMatch at /student/accounts/auth/ Reverse for 'loggedin' with arguments '()' and keyword arguments '{'username': 'arun'}' not found. 0 pattern(s) tried: []
  • 似乎您使用旧网址 /student/accounts/auth/ 而不是 url(r'^(?P&lt;username&gt;)/$ 在之前的回溯中,您忘记了 \w+ 正则表达式指针。它应该看起来像这样url(r'^(?P&lt;username&gt;\w+)/$
猜你喜欢
  • 2017-02-13
  • 2020-05-13
  • 1970-01-01
  • 2016-08-07
  • 2021-12-26
  • 2014-09-06
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多