如何重写django中的基本URL以在所有页面的URL中添加登录用户名,而不是应用程序名称? [英] How to rewrite base url in django to add logged in username in the url of all pages instead of app name?

查看:324
本文介绍了如何重写django中的基本URL以在所有页面的URL中添加登录用户名,而不是应用程序名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用django应用程序,并且具有以下应用程序的基本URL:

I am working on django application and I have base url of application as below:

127.0.0.1:8000/myblog/page

其中 127.0.0.1:8000 是基本网址和 myblog 是应用程序名称,页面是页面名称。
所以我的要求是将URL改为不需要更改我的应用程序的内部代码:

where 127.0.0.1:8000 is base url and myblog is App name and page is page name. So my requirement is to change the url to something like this without changing the internal code of my application:

127.0.0.1:8000/username/page

基本上我想用URL中的用户名更改应用名称。
我已经尝试了中提供的解决方案这个问题。但是这并没有太大帮助。

Basically I want to change App name with user name in the URL. I have tried the solution given in this SO question. But it didn't helped much.

推荐答案

您可以将用户名传递到 url regexp args并从请求获取请求用户类:

视图:

You can pass username into url regexp args and get request user from request class:
view:

def user_page(request, username):
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExists:
        raise Http404
    # or use shortcut get_object_or_404(User, username=username)
    if request.user.username != user.username:
        raise Http404
    return render(request, 'templates/user_template', {'user':user})

urls:

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

注意:用户名字段无效选择,如果不是唯一的,当您从 User.objects.get()获得更多的用户时,会产生错误。更好地使用 pk 字段进行用户页面查找。

Note: username field not valid choice, if it not unique, it will produce an error when you get more then one user from User.objects.get(). Better use pk field for user page lookup.

但是,请求用户建立用户页面的方法更简单。只有一个没有关键字参数的网址,认证用户的响应数据:

But there is simpler way for building user page for request user. Just one url without keyword arguments, which response data for authenticated user:

查看:

def user_page(request):
    user = None
    if request.user.is_authenticated():
        user = User.objects.get(pk=request.user.pk)
    return render(request, 'templates/user_template', {'user': user} )

urls:

url(r'^page/$', views.user_page, name='user_page')

现在,它根据请求用户或无返回数据如果用户未认证

Now it return data based on request user or None if user is not authenticated

这篇关于如何重写django中的基本URL以在所有页面的URL中添加登录用户名,而不是应用程序名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆