`
美丽的小岛
  • 浏览: 310707 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Django_urls.py(01)

 
阅读更多

Django 框架中,urls.py 的设置很关键,它决定了所有页面的 URL 长什么样子。所以很有必要我们开一个专题来探讨它的使用。

我们先来粗略看看 urls.py 的样子,虽然前面也有介绍,我们这里算是复习一下吧:

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'nowamagic.views.home', name='home'),
    # url(r'^nowamagic/', include('nowamagic.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)

 

前面也谈过,只要配置这么一条规则:

(r'^hello/$',hello),

就可以定义 http://127.0.0.1:8000/hello/ 路径显示 views.py 中的 hello 函数。

  •  
    模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特定的含义:上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。^hello/$匹配hello/字符串,即在网址http://127.0.0.1:8000/hello/找到hello/后,使用hello()函数显示出来,如果没有'$'结尾,则网址中输入hello1/;hello2/都会对应以hello()函数显示出来。

hello 函数我们随便写写:

from django.http import HttpResponse,Http404

def hello(request): 	#每个视图函数至少要有一个参数,通常被叫作request。 
    return HttpResponse("Hello NowaMagic!")	#一个视图功能必须返回一个HttpResponse

 

那么我需要显示首页,就是域名直接映射到某个 view 函数下,那么又怎么写呢?

(r'^$', index),

index 函数就是生成首页的 view 函数。

顺便说下,在 view 函数里,return HttpResponseRedirect('../'):返回主页,即127.0.0.1。

 

***************************************************************************************************

urls.py 的规则

URL配置(URLconf)就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。

  •  
    执行 django-admin.py startproject 时,该脚本会自动为你建了一份 URLconf(即 urls.py 文件)。在同时自动创建的settings.py文件中,创建一个变量ROOT_URLCONF,其变量的值就是根URLconf的模块名。默认值是urls.py文件的模块名。

例如:我的 Django 项目的根目录名为“pearl”,ROOT_URLCONF的默认值为“pearl.urls”。我们知道,urls.py 是用来配置 URL 的,那么它是如何工作的呢?

我们先来看看这个规则的原型:

from django.conf.urls.defaults import *
urlpatterns = patterns('',
    (r'^login/$', openid_login, {}, 'openid-login'),
)

即:

from django.conf.urls.defaults import *
urlpatterns = patterns(前缀,
    (表达式, 视图函数, 视图函数, 名称),
)

“前缀”会在视图函数里面会自动加上指引。view = prefix + '.' + view,最后调用RegexURLPattern(regex, view, kwargs, name)。

那么 RegexURLPattern() 又是长什么样子呢?先看看,暂不作深入讨论。

class RegexURLPattern(object):
    def __init__(self, regex, callback, default_args=None, name=None):
        self.regex = re.compile(regex, re.UNICODE)
        if callable(callback):
            self._callback = callback

URL的规则,Django会如何处理?

要弄清Django如何处理URL配置规则,先要了解几个概念。

  • URL模式:URL模式是指在Django urls模块中,名为urlpatterns的元组中包含的每一个值。通常由patterns方法生成urlpatterns元组的内容。
  • URL分解器:通常,一个URL分解器对应一个URL配置模块,它可以包含多个URL模式,也可以包含多个其他URL分解器。通过这种包含结构设计,实现Django对URL的层级解析。URL分解器是Django实现app与项目解耦的关键。通常由include方法操作的URL配置模块,最终会被解释成为URL分解器。
  • 匹配结果:匹配结果是指当URL被正确匹配时,需返回的匹配结果。

由于每个处理方式都需要一定篇幅介绍,故这里只作概念介绍,具体的介绍放在后面的小节里。

 

 

 
分享到:
评论

相关推荐

    django-calendar-master_pythondjango_calendar_django_源码.zip

    2. **应用目录**:`django-calendar` 应用可能包含 `models.py`(数据库模型),`views.py`(视图函数),`urls.py`(URL 配置),`templates` 目录(HTML 模板)和 `static` 目录(静态资源)等。 3. **数据库模型...

    Django_project.zip

    在`Django_project`文件夹下,可能会有如`polls`、`blog`这样的应用目录,每个应用都有自己的`models.py`(数据模型)、`views.py`(视图函数)、`forms.py`(表单类)和`templates`目录(HTML模板)。 3. **数据...

    django_demo.zip

    Django 项目通常具有特定的目录结构,包括 `manage.py`、`settings.py`、`urls.py` 和 `wsgi.py` 文件。在 `django_demo` 项目中,这些文件是管理和配置项目的关键。`manage.py` 是一个命令行工具,用于执行各种...

    django_restful.7z

    4. **urls.py** - 项目或应用的URL模式定义,用于将URL映射到视图函数或API视图。 5. **wsgi.py** - 用于部署项目的WSGI入口文件。 6. **apps/** - 应用目录,可能包含自定义的Django应用,如`api`、`users`等。 7. ...

    django_guo.zip

    - **URL路由**:Django的URL配置位于`urls.py`文件中,它将URL模式映射到视图函数,使得URL结构更加灵活和可维护。 - **表单处理**:Django提供了一套完整的表单处理机制,包括自动生成HTML表单、验证用户输入和...

    Django_mock.rar

    这将生成一个包含基础目录结构的项目,如`manage.py`、`settings.py`、`urls.py`等。 - **应用创建**:接着,我们需要创建一个应用,例如`mock_api`,用`python manage.py startapp mock_api`命令。这个应用将包含...

    django_web.rar

    学习如何在urls.py文件中定义这些映射。 8. **模板(Templates)**:使用Django模板语言(Django Template Language, DTL)编写HTML文件,其中可以插入变量和控制结构,动态生成网页内容。 9. **表单(Forms)**:...

    第一个学习电商的实战项目-django_b2c.zip

    6. `urls.py`:URL路由文件,定义了不同URL对应的视图函数。 7. `wsgi.py`:用于部署项目的接口文件,常与WSGI服务器(如Gunicorn)配合使用。 在学习这个项目时,你需要逐步理解Django的MVT(Model-View-Template...

    Django学习笔记.docx

    * 项目结构:manage.py、__init__.py、settings.py、urls.py、wsgi.py * manage.py:命令行工具,用于交互式管理 Django 项目 * __init__.py:空文件,用于标识目录为包 * settings.py:项目配置文件,主要处理文件 ...

    django_simple_blog.zip

    3. **django_simple_blog**:这通常是一个包含Django项目的目录,其中包含`settings.py`(项目配置)、`urls.py`(URL路由)、`views.py`(视图函数)、`models.py`(数据库模型)等文件。 4. **tools**:可能包含...

    Python库 | django_wakawaka-1.1-py2.py3-none-any.whl

    在Django的`urls.py`文件中,添加如下代码: ```python from django.urls import path from django_wakawaka import urls as wakawaka_urls urlpatterns = [ # ... path('wakawaka/', include(wakawaka_urls)), ...

    创建Django Web项目.docx

    - `urls.py`: 项目的主要URL配置,定义了URL到视图的映射。 - `wsgi.py`: WSGI(Web Server Gateway Interface)兼容Web服务器的入口,用于同步运行你的项目。 3. **manage.py** 在`manage.py`中,`execute_from...

    Python库 | django_debug_toolbar-1.11-py2.py3-none-any.whl

    **Python库 django_debug_toolbar-1.11-py2.py3-none-any.whl** `django_debug_toolbar` 是一个非常实用的Python开发工具,专为Django框架设计,用于提供丰富的调试信息,帮助开发者在开发过程中更好地理解应用的...

    mysite_login.zip_Django实现用户注册登录_chart1n9_django_登录注册

    from django.urls import path from user_auth import views as user_views urlpatterns = [ path('admin/', admin.site.urls), path('register/', user_views.register, name='register'), path('login/', user...

    Python库 | django_friendlyurls-0.1.0.tar.gz

    开发者可以通过运行`python setup.py install`来安装,然后在Django项目的`settings.py`文件中添加`django_friendlyurls`到`INSTALLED_APPS`列表中,以启用该库。 在实际使用过程中,开发者需要根据项目的具体需求...

    Python库 | django_url_filter-0.3.5-py2.py3-none-any.whl

    在Django项目的`urls.py`中,需要导入`url_filter`模块,并使用其提供的`include_with_filters`函数来替代Django原生的`include`函数。然后,可以定义URL模式并附上过滤器: ```python from django.conf.urls ...

    Web_Front.zip_django_python mysql

    5. `urls.py` - URL配置文件,定义URL路由规则。 6. `templates/` - HTML模板文件夹,存放视图渲染的页面。 7. `static/` - 静态文件目录,如CSS、JavaScript和图片文件。 8. `db.sqlite3` 或 `mydatabase.sql` - ...

    Python库 | django_csv_export_view-1.0.1-py2.py3-none-any.whl

    "Python库 | django_csv_export_view-1.0.1-py2.py3-none-any.whl" 是一个针对Python开发的库,特别适用于Django框架,用于实现CSV数据导出功能。这个版本是1.0.1,兼容Python 2和Python 3环境,且不依赖特定的硬件...

    django_mdeditor-0.1.18-py3-none-any.zip

    最后,别忘了在 urls.py 中包含 django_mdeditor 的相关路由,以便它可以正常工作。 总结来说,django_mdeditor 是一个用于 Django 的 Markdown 编辑组件,它简化了在 Django 后台创建和管理 Markdown 内容的过程。...

    PyPI 官网下载 | bee_django_course_simple-0.0.11.tar.gz

    在"bee_django_course_simple-0.0.11"这个子目录下,我们可以期待看到Django项目的标准结构,包括manage.py脚本(用于管理Django项目)、app目录(包含Django的应用程序)、settings.py(配置文件)、urls.py(URL...

Global site tag (gtag.js) - Google Analytics