纲领
在用户输入或系统跳转到网址后,在urls.py中找到网址对应的views.py中的视图函数(views.py中有着一个个与urls.py中对应的函数),并执行该视图函数
视图函数一般需要引用model层的模型类,用来从数据库中执行DM动作,如果是query动作,则一般将取出的数据保存,传到template层渲染
视图函数一般返回一个html页面,该html页面位于views.py所在目录的 ./templates/${app_name}/ 目录下,关于html配置详见template层
由于肯定不止一处会用到url,为了提高代码可维护性,有了命名url模式
由于肯定不止一个应用,为了简化不同应用的URL调用,有了url namespace
django中的应用程序命名空间
https://docs.djangoproject.com/en/2.0/intro/tutorial03/#namespacing-url-names
view层的一些概念
URL命名空间(url namespacing)
针对startapp创建出来的app而设计,解决多个app具有相同的url模式时的调用复杂问题
可在模板tag中的url中结合url命名模式使用生成动态url
https://docs.djangoproject.com/en/2.0/intro/tutorial03/#namespacing-url-names
URL模式
针对应用程序的url模式而设计,在使用url模式时,不需要写url模式对应的网址的硬编码,只需要调用url模式的名称,即可得到url网址,增强了可维护性。
URL跳转(url reversing)
访问一个上下文时,需要内部跳转到另一个上下文
https://docs.djangoproject.com/zh-hans/2.0/topics/http/urls/#reverse-resolution-of-urls
创建网页
1.定义URL模式
URL模式是对于每一个应用程序而言的,而对于项目的url.py中,应该定义如下
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include('learning_logs.urls')), ]
实际的URL模式是一个对函数url()的调用,该函数接受三个参数
- 正则表达式 - 与浏览器请求相对应(去掉http://localhost:8080/之后的请求)
- 视图函数 - 正则表达式与浏览器请求对应时,执行该视图函数
- url模式名 - 代码其他地方引用到这个请求地址时,可以直接使用url模式名,增加了可扩展性。
from django.urls import path from . import views # https://docs.djangoproject.com/en/2.0/intro/tutorial03/#namespacing-url-names app_name = 'learning_logs' urlpatterns = [ # learning_log主页 path('', views.index, name='index'), ]
urls.py编写官方文档
https://docs.djangoproject.com/en/2.0/topics/http/urls/#using-regular-expressions
Python 正则表达式
http://www.cnblogs.com/yc913344706/p/7821676.html
2.编写视图函数
from django.shortcuts import render # Create your views here. def index(request): # ~ 学习笔记的主页 return render(request, 'learning_logs/index.html')
关于增删改查及view层与model层、template层的结合
3.编写模板
(TODO:附template层的链接)
Django Shell
可以通过交互式终端会话以编程方式查看数据,是一个非常好的调试项目的地方
views.py视图层中通常需要查询数据库,拿到数据,传给模板
可以在django shell中模拟进行数据库的增删改查
进入:python manage.py shell
退出:linux - [Ctrl]+d;windows - [Ctrl] + Z
(ll_env) E:yc_studypythondjangosysworkspacelearning_log>python manage.py shell Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from learning_logs.models import Topic >>> Topic.objects.all() <QuerySet [<Topic: Python>]> >>> for topic in Topic.objects.all(): ... print(topic.id, topic) ... 1 Python >>> Topic.objects.get(id=1).text 'Python' >>> Topic.objects.get(id=1).date_added datetime.datetime(2018, 6, 2, 0, 53, 56, 881882, tzinfo=<UTC>) >>> Topic.objects.get(id=1).entry_set.all() <QuerySet [<Entry: unix系统中,由于最终python脚本的执行是使用python解释器执行的,所以需注意/usr/b...>]> >>> ^Z now exiting InteractiveConsole... (ll_env) E:yc_studypythondjangosysworkspacelearning_log>
django模板的shell操作
http://www.cnblogs.com/Garvey/p/6756841.html
django使用OEM的增删改查
https://docs.djangoproject.com/en/2.0/topics/db/queries
django使用SQL语句进行增删改查
https://docs.djangoproject.com/en/2.0/topics/db/sql/
QuerySet API