今天就进入到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. 201521123069 《Java程序设计》 第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. (1)文档注释(类注释.方法注释.属性注释.通用注释.) (2)多态性.instanceof ...

  2. 201521123085《Java程序设计》第4周学习总结

    1.本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 2.书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) Q2.面向对 ...

  3. Win8打开chm右侧空白解决方法

    Win8下打开CHM文件,左侧有目录,但是右侧空白.而且打开的时候,还弹出很多IE窗口. 感觉应该不是文件本身的问题.下面是我的解决方法,其他系统也可以试一试. 最初打开文件如下 首先:1,右键关联c ...

  4. 201521123004 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 注意: notify()/notifyAll()方法和wait()方法都只能在被声明为synchronized的方 ...

  5. 201521123045 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  6. Mybatis映射文件处理特殊字符【转发】

    该博文下的方法就非常好了! http://blog.csdn.net/zheng0518/article/details/10449549

  7. appium实例编写(1)---以ContactsTest.apk 操作为例

    详情参照   http://www.cnblogs.com/puresoul/p/4696825.html#3326873   自己练习一遍 前言: appium环境搭建参照另一篇博客:http:// ...

  8. Python学习笔记010_迭代器_生成器

     迭代器 迭代就类似于循环,每次重复的过程被称为迭代的过程,每次迭代的结果将被用来作为下一次迭代的初始值,提供迭代方法的容器被称为迭代器. 常见的迭代器有 (列表.元祖.字典.字符串.文件 等),通常 ...

  9. 框架应用:Mybatis(二) - 动态SQL

    MybatisUtil工具类 在实际开发中,我们可以编写一个MybatisUtil辅助类来进行对进行操作. 1)在静态初始化块中加载mybatis配置文件和StudentMapper.xml文件一次 ...

  10. MySql Jar 包下载

    MySql JAR 包下载 我们要使用Spring 链接MySql  需要两个Jar 包   一个是C3p0   一个是MySql 的Connection Jar  包 C3p0: 进入下面的网址 h ...