2016-08-21 5 views
0

Views.pyДжанго: как отправить аргумент в 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 в LoggedIn вид, но я don'y знаете, как это сделать. Я использовал username = request.GET.get("username"), но он не работает. Я хочу показать имя пользователя в url и так, чтобы оно выглядело как /student/username/ где имя пользователя изменится как другое имя пользователя.

+0

** «где имя пользователя будет меняться другой логин пользователя» ** Я думаю, что мой ответ поможет http://stackoverflow.com/questions/38781442/how-to-rewrite-base-url- in-django-to-add-log-in-username-in-the-ur-all-pa/38895767 # 38895767 –

+0

в моем quesion auth_view не передает ни одной странице, это просто проверка данных, и она хочет отправить имя пользователя от просмотра auth_view до loggedin. –

+0

Обычно вы храните это в [сеансе] (https://docs.djangoproject.com/en/1.10/topics/http/sessions/). Или используйте [djangos auth system] (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, потому что имя пользователя может быть дубликатом.
Теперь вы можете передать этот параметр в поле зрения и не указывать URL-адрес hardcore, вместо этого используйте 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

У меня есть вид изменения и URL-адреса соответственно, но он не работает ** Ошибка: ** 'Обратный для 'loggedin' с аргументами '()' и аргументами ключевого слова '{}' не найден. 0 pattern (s) try: [] '** изменить url: **' url (r '^ (? P )/$', loggedin, name = 'loggedin'), '** change views.py * * определение функции auth_view (запрос): \t имя пользователя = request.POST.get ("Имя пользователя", "") \t пароль = request.POST.get ("пароль", "") \t д = studentDetails.objects. получить (имя = имя пользователя) \t если q.password == пароль: \t \t возвращение HttpResponseRedirect (обратный ('LoggedIn'), арг = [q.username]) \t возвращение HttpResponseRedirect ("/ studemt/счета/недопустимый") ' –

+0

ах да, там была опечатка в функции' reverse', 'args' должны находить в' reverse' –

+0

nah не работает после исправления синтаксиса. –

Смежные вопросы