2013-04-13 3 views
1

У меня есть приложение, которое позволяет пользователям создавать профиль и войти.Джанго Создание пользовательских URL для профиля пользователя

Когда пользователь Войти, он перенаправляется на 127.0.0.1:8000/profile/

проблема заключается в том, я хочу, чтобы настроить URL, добавив имя пользователя до конца URL, например, например 127.0.0.1:8000/profile/michael

Это аналогичный вопрос помоему

Django - after login, redirect user to his custom page --> mysite.com/username

«получить имя пользователя, а затем сделать HttpResponseRedirect на настраиваемый URL».

Я просто не могу понять, как я могу передать имя пользователя в качестве аргумента для HttpResponseRedirect для правильной обработки пользовательского URL.

return HttpResponseRedirect('/profile/?username=%s' % (username, request.path)) 


def Profile(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:LoginRequest')) 
    person = Person.objects.get(user=request.user) 
    return render(request,'profile.html',{'person':person}) 

мой URL

url(
    r'^profile/$', 
    'pet.views.Profile', 
    name = 'Profile' 
), 

NEW

мой views.py

def LoginRequest(request): 
if request.user.is_authenticated(): 
     username = User.objects.get(username=request.user) 
     url = reverse('Profile', kwargs = {'username': username.username}) 
     return HttpResponseRedirect(url)   
if request.method == "POST": 
    form = LoginForm(request.POST) 
    if form.is_valid(): 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     Person = authenticate(username=username, password=password) 
     if Person is not None: 
      login(request, Person) 
      username= User.objects.get(username=request.user) 

          url = reverse('Profile', kwargs = {'username': username.username}) 
          return HttpResponseRedirect(url) 


return render(request, 'login.html',{'form': LoginForm()}) 




url(
    r'^login/$', 
    'pet.views.LoginRequest', 
    name = 'LoginRequest' 
), 

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


def Profile(request,username): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:LoginRequest')) 
    board = Board.objects.filter(user=request.user) 

    person = Person.objects.get(user__username=username) 
    return render(request,'profile.html',{'board':board ,'person':person}) 

ответ

3

Это будет правильное регулярное выражение для перенаправления URL, то есть. не изменяйте тот, который у вас есть.

url(r'^profile/(?P<username>\w+)/$', 'pet.views.myprofileview', name="detail_profile") 

А затем передать аргумент в перенаправлении:

url = reverse('detail_profile', kwargs={'username': profile.firstname}) 
return HttpResponseRedirect(url) 

Это приводит также того, чтобы определить новый вид:

def myprofileview(request, username): 
    person = Person.objects.get(user = request.user) 
    return render(request,'profile.html',{'person':person}) 

Это исключило бы два поведения в одной точке зрения , который я считаю очень приятным!

Мы делаем это так, потому что это строка, которую принимает HttpResponseRedirect, поэтому мы должны ее построить соответствующим образом.

Это сделает перенаправление на вид myprofileview и «стиль», если можно так выразиться, ваш url /profile/michael/.

+0

Вы форматируете это неправильно. Вы также должны делать это за пределами возврата, и для лучшей читаемости. 'formatted_string =" /profile/?{0}={1}".format(username, request.path) ', а затем' return HttpResponseRedirect (formatted_string) '. –

+0

@ donkeyboy72 Я обновил свой ответ. –

+0

@ donkeyboy72 У вас есть пользователь с именем пользователя limelights? –

1
def LoginRequest(request): 
    if request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:Profile', 
      kwargs={'username': request.user.username})) 

    if request.method == "POST": 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 

      Person = authenticate(username=username, password=password) 
      if Person is not None: 
       login(request, Person) 

       return HttpResponseRedirect(reverse('world:Profile', 
        kwargs={'username': username})) 

    return render(request, 'login.html',{'form': LoginForm()}) 
+0

@ donkeyboy72 ok – catherine

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