博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django-view层
阅读量:4553 次
发布时间:2019-06-08

本文共 2596 字,大约阅读时间需要 8 分钟。

纲领

在用户输入或系统跳转到网址后,在urls.py中找到网址对应的views.py中的视图函数(views.py中有着一个个与urls.py中对应的函数),并执行该视图函数

视图函数一般需要引用的模型类,用来从数据库中执行DM动作,如果是query动作,则一般将取出的数据保存,传到渲染

视图函数一般返回一个html页面,该html页面位于views.py所在目录的 ./templates/${app_name}/ 目录下,关于html配置详见template层

由于肯定不止一处会用到url,为了提高代码可维护性,有了命名url模式

由于肯定不止一个应用,为了简化不同应用的URL调用,有了url namespace

django中的应用程序命名空间

      

view层的一些概念

URL命名空间(url namespacing)

针对startapp创建出来的app而设计,解决多个app具有相同的url模式时的调用复杂问题

可在模板tag中的url中结合url命名模式使用生成动态url

URL模式

针对应用程序的url模式而设计,在使用url模式时,不需要写url模式对应的网址的硬编码,只需要调用url模式的名称,即可得到url网址,增强了可维护性。

URL跳转(url reversing)

访问一个上下文时,需要内部跳转到另一个上下文

创建网页

1.定义URL模式

URL模式是对于每一个应用程序而言的,而对于项目的url.py中,应该定义如下

from django.contrib import adminfrom django.urls import include, pathurlpatterns = [    path('admin/', admin.site.urls),    path('', include('learning_logs.urls')),]
# learning_log\learning_log\urls.py

实际的URL模式是一个对函数url()的调用,该函数接受三个参数

 - 正则表达式 - 与浏览器请求相对应(去掉http://localhost:8080/之后的请求)

 - 视图函数 - 正则表达式与浏览器请求对应时,执行该视图函数

 - url模式名 - 代码其他地方引用到这个请求地址时,可以直接使用url模式名,增加了可扩展性。

from django.urls import pathfrom . import views# https://docs.djangoproject.com/en/2.0/intro/tutorial03/#namespacing-url-namesapp_name = 'learning_logs'urlpatterns = [       # learning_log主页    path('', views.index, name='index'),]
# learning_log\learning_logs\urls.py

urls.py编写官方文档

      

Python 正则表达式

      

2.编写视图函数

from django.shortcuts import render# Create your views here.def index(request):       # ~ 学习笔记的主页       return render(request, 'learning_logs/index.html')
# learning_log\learning_logs\views.py

3.编写模板

(TODO:附template层的链接)

Django Shell

可以通过交互式终端会话以编程方式查看数据,是一个非常好的调试项目的地方

views.py视图层中通常需要查询数据库,拿到数据,传给模板

可以在django shell中模拟进行数据库的增删改查

进入:python manage.py shell

退出:linux - [Ctrl]+d;windows - [Ctrl] + Z

(ll_env) E:\yc_study\python\django\sys\workspace\learning_log>python manage.py shellPython 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from learning_logs.models import Topic>>> Topic.objects.all()
]>>>> 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_addeddatetime.datetime(2018, 6, 2, 0, 53, 56, 881882, tzinfo=
)>>> Topic.objects.get(id=1).entry_set.all()
]>>>> ^Znow exiting InteractiveConsole...(ll_env) E:\yc_study\python\django\sys\workspace\learning_log>
django-shell使用举例

django模板的shell操作

      

django使用OEM的增删改查

      

django使用SQL语句进行增删改查

      

QuerySet API

      

转载于:https://www.cnblogs.com/yc913344706/p/9165350.html

你可能感兴趣的文章
How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
查看>>
微信小程序picker组件 - 省市二级联动
查看>>
Dynamics CRM 给视图配置安全角色
查看>>
Eclipse修改已存在的SVN地址
查看>>
C++ ACM基础
查看>>
(转)使用 python Matplotlib 库绘图
查看>>
进程/线程切换原则
查看>>
正则表达式语法
查看>>
20165301 2017-2018-2 《Java程序设计》第四周学习总结
查看>>
Vue的简单入门
查看>>
urllib 中的异常处理
查看>>
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
比较:I/O成员函数getline() 与 get()(第二种用法)的用法异同
查看>>
7.内部类(一)之详解内部类
查看>>
1.messager消息提示框
查看>>
C teaching
查看>>
分隔指定内容,提取章节数
查看>>
this point
查看>>
验证登录信息是否合法
查看>>
线程池
查看>>