Django框架详解之url

Posted iamluoli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django框架详解之url相关的知识,希望对你有一定的参考价值。

Django基本命令

下载Django

pip3 install django

创建一个django project

django-admin.py startproject cms

  当前目录下会生成cms的工程,目录结构如下:

技术分享图片

  setting.py --- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量

  urls.py --- 负责把url模式映射到应用程序

  wsgi.py --- 用于开发服务器和生产WSGI部署

  manage.py --- Django项目里面的工具,通过它可以调用django shell和数据库等

创建应用

  在cms目录下创建应用

python manage.py startapp app01

技术分享图片

启动django项目

python manage.py runserver 8000

技术分享图片

同步更改数据库表或字段

python manage.py makemigrations
python manage.py migrate

  这种方法可以创建表,当你在modles.py中新增了类时,运行它就可以自动在数据库中创建表了

查看所有的命令

  查看所有命令,忘记子名称的时候有用

python manage.py

静态文件配置

STATIC_URL = /static/
STATICFILRS_DIRS = (
    os.path.join(BASE_DIR, static),
)

MTV模型之url路由配置系统

正则字符串参数

  简单配置

from django.conf.urls import url
from django.contrib import admin
from app01.views import *

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^my_day/([0-9]{4})/$, my_day),
    url(r^my_day/([0-9]{4})/([0-9]{2})/$, my_day2),
    url(r^my_day/([0-9]{4})/([0-9]{2})/([0-9]{2})/$, my_day3),
]

# 一旦匹配成功则不再继续
# 若要从url中捕获一个值,只需要在它周围放置一对圆括号
# 不需要添加一个前导的反斜杠,因为每个url都有(^my_time 而不是^/my_time)
# 每个正则表达式前面的r是可选的但是建议加上
技术分享图片
def my_day(request,year):
    return HttpResponse(year)

def my_day2(request,year,month):
    return HttpResponse(%s-%s%(year,month))

def my_day3(request,year,month,day):
    return HttpResponse(%s-%s-%s%(year,month,day))
code
技术分享图片
#设置项是否开启URL访问地址后面不为/跳转至带有/的路径
APPEND_SLASH=True
View Code

   有名分组(named group)

  上面的示例使用的是没有命名的正则表达式组,在更高级的用法中可以使用命名的正则表达式组,在python正则表达式中,命名正则表达式组的语法是(?P<name>pattern)

from django.conf.urls import url
from app01.views import *

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^my_day/(?P<year>[0-9]{4})/$, my_day),
    url(r^my_day/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$, my_day2),
    url(r^my_day/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$, my_day3),
]
#捕获的值作为关键字参数而不是位置参数传递给视图函数

  urlconf查找

  urlconf在请求的url上查找,将它当作一个普通的python字符串,不包括GET和POST参数以及域名

技术分享图片
http://www.example.com/myapp/ 请求中,URLconf 将查找myapp/。

http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找myapp/。
example

  urlconf捕获的参数永远是字符串

  每个捕获的参数都作为一个普通的python字符串传递给视图

  指定视图参数的默认值

技术分享图片
from django.conf.urls import url
from app01.views import *

urlpatterns = [
    url(r^my_day/(?P<year>[0-9]{4})/$, my_day2),
    url(r^my_day/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$, my_day2),
]
urlconf
技术分享图片
def my_day2(request,year,month=3):
    return HttpResponse(%s-%s%(year,month))
view

  两个url都指向同一个视图,如果第一个模式匹配,视图函数将使用参数的默认值;如果第二个模式匹配,视图函数将使用正则表达式捕获的值

  Including other URLconfs

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

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^app01, include(app01.urls))

]

传递额外的选项给视图函数

  urlconfs具有一个钩子,让你传递一个python字典作为额外的参数传递给视图函数

from django.conf.urls import url
from django.contrib import admin
from app01.views import *

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^my_day/(?P<year>[0-9]{4})/$, my_day2, {foo:bar}),
]

#django.conf.urls.url()函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数

url反向解析

   在模板中,Django使用url模板标签用于反向解析url

from django.conf.urls import url
from app01.views import *

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^hello, my_hello, name=little_hello),
]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>my_day</title>

</head>
<body>
<a href="{%url ‘little_hello‘%}">点我跳转</a>
</body>
</html> 

 

以上是关于Django框架详解之url的主要内容,如果未能解决你的问题,请参考以下文章

doraemon的python django框架的路由详解(国庆大更新)

Django框架 之 querySet详解

Django框架 之 querySet详解

Django框架详解

Web框架目录

Django 框架之 URL