View(视图层)
视图(View),即业务逻辑层。主要的职责是:存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。通俗来讲是用来接受Web请求,并做出响应。
urls
url()函数:可以接收四个参数,分别是两个必选参数regex、view 和两个可选参数kwargs、name:
regex:正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
view:用于执行与正则表达式匹配的 URL 请求。
kwargs:视图使用的字典类型的参数。
name:用来反向获取 URL。
这里以一个简单的小例子:
# 创建一个新的app
python manage.py startapp view
# sttings.py注册
INSTALLED_APPS = [
'view.apps.ViewConfig',
]
# urls.py导入
urlpatterns = [
url(r'^view/', include('view.urls')),
]
# 创建view/urls.py
urlpatterns = [
url(r'^index/', views.index)
]
# 测试
def index(request):
return HttpResponse("view")
创建完成之后,测试一下。
路由器(regex)
按照列表的书写顺序进行匹配的
从上到下匹配,没有最优匹配的概念
例如:
urlpatterns = [
url(r'^index', views.index),
url(r'^indexs', views.indexs),
]
url1:http://127.0.0.1:8000/view/indexs/
url2:http://127.0.0.1:8000/view/index/
我访问上面两个url,返回的都是URL2的内容,
正确的应该以下面规则编写:
# 路由规则编写
我们通常直接指定以 ^ 开头
在结尾处直接添加反斜线
路由路径中的参数使用 () 进行获取
一个圆括号对应视图函数中的一个参数
路径参数
# 匹配一个数字参数
urlpatterns = [
url(r'^index/(\d+)/', views.index),
]
# 用s_id来接收参数
def index(request,s_id):
print(s_id)
print(type(s_id))
return HttpResponse("view")
1、位置参数
例如:
urlpatterns = [
url(r'^index/(\d+)/(\d+)/(\d+)/', views.index),
]
# 按照书写顺序进行匹配
def index(request, yeas, moth, day):
print(yeas, "-", moth, "-", day)
return HttpResponse("Time:{yeas}-{moth}-{day}".format(yeas=yeas, moth=moth, day=day))
上面用三个参数(yeas, moth, day),来接收年月日
2、关键字参数
# 关键字参数写法
url(r'^index/(?P<yeas>\d+)/(?P<moth>\d+)/(?P<day>\d+)/', views.index, name='getdate'),
# 按照参数名称匹配,和顺序就无关了
def index(request, yeas, moth, day):
return HttpResponse("Time:{yeas}-{moth}-{day}".format(yeas=yeas, moth=moth, day=day))
参数个数必须和视图函数中参数个数一致(除默认的request以外)
反向解析
根据根路由中注册的namespace和在子路由中注册name,这两个参数来动态获取我们的路径
在模板中使用 {% url 'namespace:name' %}
如果带有位置参数 {% url 'namespace:name' value1 value2 [valuen...] %}
如果带有关键字参数 {% url 'namespace:name' key1=value1 key2=value2 [keyn=valuen....] %}
后记:
最初的想法是做一个自己写的工具后台,所以Django的MTV就先学到这里,后续有需要的话,再去学习,查看文档或者google解决问题吧。
声明:
- 笔者初衷用于分享与交流网络知识,若读者因此作出任何危害网络安全行为后果自负,与作者无关!