urls.py 配置方法
1、先配置全局工程下的 url 分发,通过不同的url 匹配规则,分发到不同的app (app可理解为不同的站点)
一般设置全局工程的 url.py 分发到 ----------->不同站点(app)下的 urls.py
from django.conf.urls import url,include #include 要新增
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls), #系统默认
url(r'^android/',include('android.urls')), #新增分发到APP下的ulrs
]
2、配置APP下的 urls.py 映射 ,通过正则表达式,来分发对应的view.py下的函数
from django.conf.urls import url
from android.views import index,login,list,logout
urlpatterns = [
url(r'^index/',index),
url(r'^login/',login),
url(r'^list/(?P\d*)/',list), #推荐?P版型正则表达式规则,方便理解
url(r'^list/(?P\w*)/',list) \d* 0到多个数字,\w* 0到多个字母
url(r'^logout/',logout,name='logout'), #通过name 命名后,模版调用更加方便
]
3、在站点(app)下的 views.py 下,写出对应的解析函数,配置成功
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('index')
def login(request):
return HttpResponse('index')
def list(request,name):
return HttpResponse('list')
4. 在CMD 下,进入mange.py目录,并运行 manage.py (内置服务器), 即可开启浏览器测试
python manage.py runserver
特别说明:
在django 中,浏览器的 网址 尾部 会默认加上 '/' 如:http:// www.baidu.com/
这是受配置文件 setting.py中APPEND_SLASH项控制的 ,默认为 True
如果不需要网址末尾加斜杠 '/' ,在setting.py中新增APPEND_SLASH=Flase即可
导入多个app 的视图函数:
如果导入多个app 的 视图函数,若遇到重名,则需要 as 转换
from django.conf.urls import url
from django.contrib import admin
from app01 import views
from session import views as session_views #用as 转换
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/(\w*)', views.index),
url(r'^login/$', session_views.login), #使用转换后的视图函数
url(r'^main/$', session_views.main),
url(r'^logout/$', session_views.logout),
]
url name
注意: url 配置 成 name ='xxx' ,可对 url 关系进行命名,以后根据此名称生成想要的url
如果url 太长,可以用此种方法
如 :urls.py -- url(r'^asdasdasdadasdasdasdasd/',logout,name='logout')
html模版 :
对应浏览器上的url 为: /asdasdasdadasdasdasdasd/3/
name 扩展
from django.urls import reverse #可帮我们生成想要的url
urls.py
url(r'^asdfasdfasdf/', views.index, name='i1'), #规则1
url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
url(r'^buy/(?P\d+)/(?P\d+)/', views.index, name='i3'),
views.py
from django.urls import reverse
def func(request, *args, **kwargs):
url1 = reverse('i1') # asdfasdfasdf/ 生成的url,根据规则1
url2 = reverse('i2', args=(1,2,)) # yug/1/2/
url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
html 模版
# xxx.html
{% url "i1" %} # asdfasdfasdf/
{% url "i2" 1 2 %} # yug/1/2/
{% url "i3" pid=1 nid=9 %} # buy/1/9/
其他url调用
# 当前的URL
request.path_info
url 默认值
urls.py
url(r'^index/$', views.index {'name':root},
views.py
def index(request,name):
pass
urls命名空间
urls include分发 ,加name 加 namespace ,案例
1、主urls.py
from django.conf.urls import url,include #include 要新增
urlpatterns = [
url(r'^a/',include('app01.urls' ,namespace='author')),# namespace 命令空间
]
2、app01.urls
app_name = 'app01' #添加app_name = 'app01'
urlpatterns = [
url(r'^index/',views.index name='lee'),
]
3、view.py
from django.urls import reverse
def index(request):
v = reverse('author:lee')
print(v) #生成 的ulr 为 /a/index/
4、html 调用url
{% url 'author:lee'%}
FBV 和 CBV
FBV: function base views 函数对应视图 ,上述博客内容 说明的都是函数对应视图
CBV: class vase views 类对应视图
CBV (类对应视图)使用方法:
views.py
from django.views import View #必须导入 View
class Home(View) #该类必须继承 View 类
def post(self,request): #post 请求放post 函数里面 ,self,request 必填
pass
def get(self,request): #get 请求放get 函数里面
pass
不同的请求可以放在不同的函数里面(get,post,put),是因为,定义的类继承了 View 类的 dispath() 方法
默认定义以下方法后,可以自动识别
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
urls.py
from xxxapp import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/', views.Home.as_view()), #必须为 vews.xx类.as_view()
]