2016-08-21 101 views
0

Views.pyDjango的:如何在HtpResponseRedirect发送参数

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发送用户名的log​​gedIn的看法,但我don'y知道如何做到这一点。 我已经使用username = request.GET.get("username"),但它不工作。 我想要在url中显示用户名,使其看起来像/student/username/ 其中用户名将更改为不同的用户登录。

+0

**“其中用户名将会改变为不同的用户登录” **我想,我的回答将帮助你http://stackoverflow.com/questions/38781442/how-to-rewrite-base-url- in-django-add-logged-in-username-in-the-url-of-all-pa/38895767#38895767 –

+0

在我的问题中,auth_view没有渲染任何页面,它只是检查数据,它想发送用户名从auth_view到登录视图。 –

+0

您通常会将其存储在[会话](https://docs.djangoproject.com/en/1.10/topics/http/sessions/)中。或者使用[djangos auth系统](https://docs.djangoproject.com/en/1.10/topics/auth/default/),而不是滚动自己的。 – mata

回答

0

你应该在URL先通过参数:

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

但更好地利用pk场或name + pk的东西,如URL parametr,因为用户名可能是重复的。
现在,您可以在视图中传递此参数,并且不要核心网址,而是使用带有网址名称的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')) 
+0

我有相应的更改视图和网址,但它不工作**错误:**倒退'登录'与参数'()'和关键字参数'{}'未找到。尝试使用0个模式:[] '** change url:**'url(r'^(?P )/ $',loggedin,name ='loggedin'),** ** change views.py * *'DEF auth_view(请求): \t用户名= request.POST.get( “用户名”, “”) \t密码= request.POST.get( “密码”, “”) \t q = studentDetails.objects。得到(NAME =用户名) \t如果q.password ==密码: \t \t返回HttpResponseRedirect(反向( '的loggedIn'),ARGS = [q.username]) \t返回HttpResponseRedirect( “/ studemt /帐号/无效” )' –

+0

啊是的,在'reverse'函数中有错字,'args'必须位于'reverse'中 –

+0

nah它纠正语法后不工作。 –