Django 如何处理多变的URL

最近在处理Django的问题中遇到的一个比较棘手的问题就是,产品经理有时候会觉得我们网站之前的UrL太土了,比如说登陆,之前用www.xxxx.com/denglu,产品经理说这个要改成login,但是在整个产品体系中,涉及到跳转登陆的不止一个地方啊,一个个地方去查找的话太麻烦了,所以这个时候突然想到了之前学过的一个知识点,利用reverse 来给Django重命名。

具体还是看代码吧:

先看url.py里面的代码:

from django.conf.urls import url
from django.contrib import admin
from app01 import views as app01_views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('denglu',app01_views.login),
    url('tv/',app01_views.tv),
    url('movie/',app01_views.movie),
    url('zy/',app01_views.zy),
    url('',app01_views.index)
]

在这个地方,我们把代码修改一下:

from django.conf.urls import url
from django.contrib import admin
from app01 import views as app01_views

url_patterns = [
    url(^'admin/',admin.site.urls),
    url('signin',app01_views.login,name='login'),
    url('tv/',app01_views.tv),
    url('movie/',app01_views.movie),
    url('zy/',app01_views.zy),
    url('',app01_views.index)

]

然后在views.py里面进行修改(具体代码如下):

#encoding=utf-8
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.core.urlresolvers import reverse


def index(request):
    username = request.GET.get('username')
    if username:
        return render(request,'index.html')
    else:
        return redirect(reverse('login'))

def movie(request):
    username = request.GET.get('username')
    if username:
        return render(request,'movie.html')
    else:
        return redirect(reverse('login'))

def tv(request):
    username = request.GET.get('username')
    if username:
        return render(request,'tv.html')
    else:
        return redirect(reverse('login'))

在处理的时候使用redirect 结合reverse来使用即可。

另外:我使用的Django是1.9.13版本,所以引入reverse的语法是:

from  django.core.urlresolvers import reverse

后面的版本普遍使用的是:

from django.shortcuts import reverse

所以,大家在使用的时候还是要根据自己的版本来进行选择。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章