django路由系统

路由--不用说都知道是什么,那么django的路由是什么?

答:django的路由就是url,它在urls.py文件里面,如下图:

提到路由,那么就肯定有分发,django路由系统里面也有分发,那它是怎么分发的?接下来先创建一个项目(在编辑器里创建项目的时候需要顺带创建一个app)

from django.conf.urls import url,include # 引入include
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^include/', include("app1.urls")), # 指向app1下面的urls 
#
url(r'', include("app1.urls")), # 做分发的话第一个include可以不写,因为它只是一个名字,后面还会用到正则代替它
]

# include后面加括号,因为它源码是一个函数,然后里面必须用引号,别问为什么,源码规定

然后在你的app下面新建一个urls.py的文件,用于接收全局urls指来的链接(我习惯叫它链接),如下图

 然后在你自定义的urls.py文件里面写上和全局相似的内容(也可以一样,看你得瑟的程度),我是这样写的

from django.conf.urls import url
from app1 import views # 这里的"app1"也可以写成".",知道liunx的知道什么意思哈


urlpatterns = [
    url(r'^my_include/', views.my_include),
]
from django.shortcuts import HttpResponse

def my_include(request):
    return HttpResponse("这是通过路由分发显示的")

然后启动你的服务,如果不知道的话可以直接输入你的ip和端口,然后它会提示你!如果你写的和我一样的话就直接是入http://127.0.0.1:8000/include/my_include/,然后你会看到下图

 如果你嫌第一个"include"碍眼的话,你可以把它在路由系统里面去掉,上图给出来了,然后你再输入的时候可以直接输入http://127.0.0.1:8000/my_include/就可以看到效果了,不过......在一般的项目中,前面最好写上,因为你的一个项目不可能只有一个app,也不可能只有一个功能,比如注册,你就得写一个注册的app;登录,就得写一个登录的app;获取各种内容等,都是需要独立的app,因为涉及到后期方便扩展和管理,这就是你看到的通常一个链接后面跟一个公司名或者什么的,然后你每点开一个页面它都是在你第一个名字后面做的扩展,就是这个原因。

接下来说一下路由还有一个叫做“反向生成url”,什么叫反向,听名字很容易猜测,就是反着来呗,那么它有什么用?是做什么的?怎么用?接下来慢慢说:

举个例子........不太好举,因为这个涉及到前端和稍微有点内容的知识点了,emmmm...............,说吧!

假如你的一个页面,做完操作之后需要跳转到另一个页面,比如你首页登录成功后需要跳转到主页;你从这个页面点击一个按钮跳转到其它页面等,多说无益,下面开始行动

首先settings:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            os.path.join(BASE_DIR, 'app1/templates'), # 添加上这行
        ]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 然后再你的app里面创建一个“template”目录,然后在里面新建一个html文件,然后里面随便写上内容

<h1>tins is app1_server</h1>
<a href="{% url "server" %}"></a>

接下来在你的全局的html文件里写上

<h1>tins is server</h1>
<a href="{% url "myinclude" %}">app1_server</a>

然后在你的app的views里面写上

from django.shortcuts import render

def my_include(request):
    return render(request,"app1_server.html")

接下来在你的全局的views里写上

from django.shortcuts import render

def server(request):
    return render(request, "server.html")

接下来在你的app的urls里面写上

from django.conf.urls import url
from app1 import views


urlpatterns = [
    url(r'^my_include/', views.my_include,name="myinclude"),
]

然后在你的全局的urls里面写上

from django.conf.urls import url,include
from django.contrib import admin
from . import views


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^server/', views.server,name="server"),
    url(r'', include("app1.urls")),
]

上面操作完之后,启动你的系统,首先输入http://127.0.0.1:8000/server/,会看到页面内容下面有一个蓝色的链接

然后你点击这个链接,它会跳转到

 然后再点击下面的链接,会发现它又跳转你的"主页"了

 这一系列的操作都是由前端给你实现的,也就是前端的<a>标签里面的“{% url%}”帮你实现的,它就是通过你的urls.py里面的“name=xxx”去操作的,这种功能通常用在主页面跳转到其他页面,包括第三方页面,这样的话会减少你的开发效率和时间,当然了,name前端可以使用,后端也可以使用,前后端也可以使用,前后端使用方法如下:

首先,在你的全局urls里面再写一个页面,用于测试跳转用的,创建完之后在里面写上如下内容

name_server.html:

<h1>this is name_server</h1>

然后改一下你全局中的html文件原来的内容

server.html

<h1>tins is server</h1>
<form action="/name_server/" method="post">
    <input type="submit">
    {% csrf_token %}
</form>

# form和csrf_token后面会说,现在先这么写

接下来修改你的全局视图

views:

from django.shortcuts import render

def server(request):
    return render(request,"server.html")

def name_server(request):
    return render(request,"name_server.html")

然后再修改你的全局urls:

urls.py:

from django.conf.urls import url,include
from django.contrib import admin
from . import views


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^server/', views.server,name="server"), # 增加
    url(r'^name_server/', views.name_server,name="name_server"), # 增加
    url(r'', include("app1.urls")),
]

上面操作完之后,启动系统,然后输入http://127.0.0.1:8000/server/会看到一个带着按钮的页面

 按图上操作,你会发现它跳转到另一个页面了

 这就是前端和后端的使用方法,当然了,最后一个就是纯后端了,也就是后端和你跳转,通过上面两个步骤,你会发现:所有的操作都是基于前端实现的,这样做的目的是为了防止你后台在urls里面把最前面的那个给改了,这样你有了name=xxx后,你就不用担心再从前端页面挨个去改了,说的比较模糊,如果有疑问,可以直接评论问我,这里就不明说了。

后端跳转如何利用name去实现,接下来看

首先在你的全局的html文件里面全部改成

server:

<h1>tins is server</h1>
<p1>这是首页</p1>
<form action="{% url "myinclude" %}" method="post">
    <input type="submit" value="去登陆">
    {% csrf_token %}
</form>

name_server:

<h1>this is name_server</h1>
<p1>这是你登录成功跳转的主页</p1>

改完之后,进入到你的app里面,接下来所有的操作都在app1里面去完成,首先改html文件

<h1>tins is app1_server</h1>
<form action="{% url "myinclude" %}" method="post">
    <input type="text" name="user">
    <input type="text" name="password">
    <input type="submit">
    {% csrf_token %}
</form>

接下来改视图函数

from django.shortcuts import render,redirect

def my_include(request):
    if request.method == "POST":
        user = request.POST.get("user")
        password = request.POST.get("password")
        if user == "chen" and password == "123456":
            return redirect("/name_server/")
    return render(request,"app1_server.html")

改完之后,启动你的服务,输入http://127.0.0.1:8000/server/

点了“去登陆”之后,会发现它跳转了,如下图

 输入内容之后,会发现它又跳转了

 好了,到此为止,关于name的使用,结束了!大概做个总结:

name=“xxx”
可以知道,它是为了使你的url的第一个名字改变后,你不用再挨个的去改html文件里面的路径了,节省了你大量的工作量

它可以在前端使用,也可以在后台使用,更可以前后端一起使用,灵活性更强了

后面会说一个叫反射的,也用到了name,以后再说,目前这个阶段暂时用不上
前端页面中的“url”相比较其他的跳转什么的,比较好用,特别是你涉及到与app之间的跳转,所以工作中比较推荐使用这种方式,源码自己看

 

posted on 2018-06-19 10:25  ArkhamKnight  阅读(82)  评论(0)    收藏  举报

导航