django-view层

纲领

在用户输入或系统跳转到网址后,在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')),
]
# learning_log\learning_log\urls.py

实际的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'),
]
# learning_log\learning_logs\urls.py

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')
# learning_log\learning_logs\views.py

关于增删改查及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_study\python\django\sys\workspace\learning_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_study\python\django\sys\workspace\learning_log>
django-shell使用举例

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

       https://docs.djangoproject.com/en/2.0/ref/models/querysets/

posted @ 2018-06-11 07:37  yc紫日  阅读(221)  评论(0编辑  收藏  举报