【问题标题】:Django Creating custom URL for user profileDjango为用户配置文件创建自定义URL
【发布时间】:2013-04-05 18:26:18
【问题描述】:

我有一个应用程序允许用户创建个人资料并登录。

当用户登录时,他被重定向到 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

“获取用户名,然后对自定义 URL 执行 HttpResponseRedirect。”

我似乎无法弄清楚如何将用户名作为参数传递给 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(
    r'^profile/$',
    'pet.views.Profile',
    name = 'Profile'
),

我的意见.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})

【问题讨论】:

    标签: django


    【解决方案1】:

    这将是您重定向 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 视图和“样式”,如果你可以这样称呼它,你的网址/profile/michael/

    【讨论】:

    • 您的格式错误。您还应该在返回之外执行此操作,以提高可读性。 formatted_string = "/profile/?{0}={1}".format(username, request.path) 然后return HttpResponseRedirect(formatted_string)
    【解决方案2】:
    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()})
    

    【讨论】:

      猜你喜欢
      • 2013-02-25
      • 2012-10-12
      • 2016-12-03
      • 2013-09-08
      • 2017-02-10
      • 2011-08-05
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多