今天就进入到python最重要的阶段了django框架,框架就像胶水一样会将我们前面学的所有知识点粘合在一起,所以以前有哪些部分模糊的可以看看前面的随笔。本篇主要介绍djangoMTV模型,视图层之路由配置系统(URlconf)和视图层之视图函数(views)。

本篇导航:

一、MTV模型

1、python主要框架:

django:大而全

flask:小而精

2、Django的MTV

Model(模型):数据库相关的操作(ORM)

Template(模版):模板语法--->将变量(数据库数据)如何巧妙嵌入html页面中

View(视图):逻辑处理

此外,Django还有一个urls分发器:路径与视图函数的映射关系

3、关系图


二、django基本命令

1、下载

pip3 install django

2、创建项目

django-admin.py startproject mysite

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。

settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。

urls.py ----- 负责把URL模式映射到应用程序。

3、创建应用

python manage.py startapp blog

models.py --- 数据库相关的操作。

tests.py --- 用于测试

views.py --- 用来写逻辑处理

4、启动项目

python manage.py runserver IP PORT

IP:可以不写 不写默认本机

PORT(端口):可以不写 不写默认8000


三、视图层之路由配置系统(URlconf)

功能:建立起url与视图函数的映射关系。

也就是告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

基本格式:

'''
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
] 参数说明:
一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数
'''

1、简单举例

from django.conf.urls import url

from 项目 import views

urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
]

注意:

'''
一旦匹配成功则不再继续 只匹配第一个url
若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
每个正则表达式前面的'r' 是可选的但是建议加上。
'''

 2、有名分组

1 无名分组
url(r'^articles/(\d{4})/(\d{2})$', views.year_month)
# year(requset,1990,12)
按位置传参数
2 有名分组
url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month)
# year(requset,year=1990,month=12) 按位置传参数

3、查找方式

在http://www.example.com/myapp/ 请求中,URLconf 将查找myapp/ 。

在http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找myapp/。

URLconf 不检查请求的方法。所有的请求方法--> 同一个URL的POST、GET、HEAD等等--> 都将路由到相同的函数。

4、url 分发

如果一个项目中应用太多,导致方法太多耦合性太强,所以我们可以用include进行解耦,在每一个应用中分别建立一个urls

项目中的urls:

from django.conf.urls import include, url
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('blog.urls')),
]

应用中的urls:

from django.conf.urls import url

import views

urlpatterns = [
url(r'^articles/2003/05$', views.year_month2), # year(requset,1990,12)
url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month), # year(requset,year=1990,month=12) 按位置传参数
]

5、传递额外的选项给视图函数(了解)

django.conf.urls.url() 函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数。

from django.conf.urls import url
from . import views urlpatterns = [
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
]

在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive(request, year='2005', foo='bar')

6、URL 的反向解析(别名)

例如:以下URL(name)

from django.conf.urls import url
from django.contrib import admin
from app1 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.login),
url(r'^login/', views.login,name="login")
]

你可以在模板的代码中使用下面的方法获得它们(提交:action):(模板后面会说到)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>登录页面</h1>
<form action="{% url "login" %}" method="post">
<p><input type="text" name="user"></p>
<p><input type="password" name="pwd"></p>
<p><input type="submit"></p>
</form>
</body>
</html>

这样当你的匹配规则及路径发生变动时其他地方不会发生错误


四、视图层之视图函数(views)

1、简单视图:

一个视图函数,简称视图,用来逻辑处理。是一个简单的Python 函数,它接受Web请求并且返回Web响应。

1)下面是一个返回当前日期和时间作为HTML文档的视图:

from django.http import HttpResponse
import datetime def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)

2)一定包含两个对象:
requset---->请求信息
Httpresponse---->响应字符串

2、request里包含哪些数据(重点)

request.GET: GET请求的数据    {}
request.POST:POST请求的数据 {}
request.method:请求方式:GET 或 POST
请求某个键下多个值时:
request.POST.getlist("hobby")
request.path : 请求路径
请求url:http://127.0.0.1:8000/index.html/23?a=1
request.path:/index.html/23
request.get_full_path()
请求url:http://127.0.0.1:8000/index.html/23?a=1
request.get_full_path():/index.html/23?a=1 COOKIES:
包含所有cookies的标准Python字典对象;keys和values都是字符串。 FILES:
包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面
三个Keys:filename:上传文件名,用字符串表示,content_type: 上传文件的Content Type, content:上传文件的原始内容 user:
是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以
通过user的is_authenticated()方法来辨别用户是否登陆:if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用 session:
唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。

3、Httpresponse函数

HttpReponse是服务器接收到浏览器的请求后,处理返回结果常用的一个类。主要用于返回字符串。

它是在每次请求中必有的,哪怕你用的是render例如:

def render(request, template_name, context=None, content_type=None, status=None, using=None):
"""
Returns a HttpResponse whose content is filled with the result of calling
django.template.loader.render_to_string() with the passed arguments.
"""
content = loader.render_to_string(template_name, context, request, using=using)
return HttpResponse(content, content_type, status)

render内部函数最终还是返回了HttpResponse

4、render函数

render(request, template_name[, context])

结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

参数:

request: 用于生成响应的请求对象。

template_name:要使用的模板的完整名称,可选的参数(也就是我们说的网页)

context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。

content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。

status:响应的状态码。默认为200。

def index(request):
name="yuan"
return render(request,"index.html",{"n":name})

5、redirect 函数(重定向)

参数可以是:

一个模型:将调用模型的get_absolute_url() 函数

一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称

一个绝对的或相对的URL,将原封不动的作为重定向的位置。

默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

def index(request):
return redirect("/login.html/")

会从urls中重新走一遍login.html的视图函数 也可以直接写地址进行重定向

6、render和resdirect的区别

render: 只是返回页面内容,但是未发送第二次请求,url未刷新,所以当刷新后又会回到前页面。

redirect:发送了第二次请求,url更新

if 页面需要模板语言渲染,需要的将数据库的数据加载到html,那么render方法则不会显示这一部分。


注意:

使用post请求时需要在settings.py配置文件中注释一行代码

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware', 就是这行
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

62、django之MTV模型(urls,view)的更多相关文章

  1. django之MTV模型(urls,view)

    今天就进入到python最重要的阶段了django框架,框架就像胶水一样会将我们前面学的所有知识点粘合在一起,所以以前有哪些部分模糊的可以看看前面的随笔.本篇主要介绍djangoMTV模型,视图层之路 ...

  2. django 之MTV模型

    一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...

  3. Django的MTV模型

    MTV模型 Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性. MTV框架是Django的框架,三部分为: Model Template(模板) View ...

  4. Django【第1篇】:Django之MTV模型

    Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...

  5. python框架Django中MTV框架之VIew(业务控制器)

    MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...

  6. 初识DJango——MTV模型

    一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...

  7. Django基础之MTV模型

    一.Django基础 一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型(Model).视图(View)和控制器(Control ...

  8. Django的基本开发环境配置和MTV模型

    一.MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的 ...

  9. Django框架(二) MTV模型简介

    MTV模型 Django的MTV分别代表 Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM) Template(模板):放所有的html文件 模板语法:目的是将白变量(数据库的内 ...

随机推荐

  1. 201521123113 《Java程序设计》第2周学习总结

    1.本周学习总结 学习了各种java数据类型以及各种运算符的使用 string类之所以好用是因为这是人可以看得懂的类型,操作简便 Scanner扫描器与标准输出输入用法上的不同,Scanner较标准输 ...

  2. 201521123067 《Java程序设计》第13周学习总结

    201521123067 <Java程序设计>第13周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 Q1. 网络基 ...

  3. 【java】聊聊java里的接口

    接口的概念 java中的接口用于描述类应该具备什么样的功能,而不给出具体的实现,一个类可以“实现”多个接口 [注意]接口不是类,而是对类的一组描述   还是让我们通过一个例子来看看接口如何运作吧!   ...

  4. Java实现Map集合二级联动

    Map集合可以保存键值映射关系,这非常适合本实例所需要的数据结构,所有省份信息可以保存为Map集合的键,而每个键可以保存对应的城市信息,本实例就是利用Map集合实现了省市级联选择框,当选择省份信息时, ...

  5. 实验:体会Oracle权限/角色赋予的差异

    环境:Oracle 11.2.0.4 目的:验证业务用户的权限/角色赋予的差异 现在创建两个用户jingyu2和jingyu3: SYS@jyzhao1> create user jingyu2 ...

  6. Unity 3D Time 类

    Time   class in UnityEngine Description The interface to get time information from Unity. Static Var ...

  7. getOutputStream() has already been called for this response

    错误日志里偶尔会有getOutputStream() has already been called for this response这个错误 最近发现了高概率复现条件,所以顺手解决了一下: 首先根 ...

  8. angularjs的几种常见写法

    学习angularjs不久,遇见的angularjs的写法也是很多的感觉,今天就在这里记录一下,还有没见过的,继续学习中... angularjs 常用的几种种写法 1.链式: angular.mod ...

  9. python基础之七种运算符

    废话不多说,上节说的是数据类型,本篇讲讲数据运算. 在算式"1+2"中,"1"和"2"被称为操作数,"+"被称为运算符 ...

  10. 《MATLAB从入门到放弃》打通 “矩阵” 障碍

    目录: »   矩阵的生成与大小  >   简单矩阵的生成  >  随机矩阵的生成  >   矩阵的大小 »  矩阵的索引与访问 »  矩阵的拼接与裁剪 >  矩阵的拼接 &g ...