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

本篇导航:

一、MTV模型

1、python主要框架:

django:大而全

flask:小而精

2、Django的MTV

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

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

View(视图):逻辑处理

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

3、关系图


二、django基本命令

1、下载

  1. pip3 install django

2、创建项目

  1. django-admin.py startproject mysite

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

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

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

3、创建应用

  1. python manage.py startapp blog

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

tests.py --- 用于测试

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

4、启动项目

  1. python manage.py runserver IP PORT

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

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


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

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

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

基本格式:

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

1、简单举例

  1. from django.conf.urls import url
  2.  
  3. from 项目 import views
  4.  
  5. urlpatterns = [
  6. url(r'^articles/2003/$', views.special_case_2003),
  7. url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
  8. ]

注意:

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

 2、有名分组

  1. 1 无名分组
  2. url(r'^articles/(\d{4})/(\d{2})$', views.year_month)
  3. # year(requset,1990,12)
  4. 按位置传参数
  5. 2 有名分组
    url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month)
  6. # 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:

  1. from django.conf.urls import include, url
  2. from django.contrib import admin
  3.  
  4. urlpatterns = [
  5. url(r'^admin/', admin.site.urls),
  6. url(r'^blog/', include('blog.urls')),
  7. ]

应用中的urls:

  1. from django.conf.urls import url
  2.  
  3. import views
  4.  
  5. urlpatterns = [
  6. url(r'^articles/2003/05$', views.year_month2), # year(requset,1990,12)
  7. url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month), # year(requset,year=1990,month=12) 按位置传参数
  8. ]

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

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

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

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

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

例如:以下URL(name)

  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from app1 import views
  4. urlpatterns = [
  5. url(r'^admin/', admin.site.urls),
  6. url(r'^$', views.login),
  7. url(r'^login/', views.login,name="login")
  8. ]

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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <h1>登录页面</h1>
  9. <form action="{% url "login" %}" method="post">
  10. <p><input type="text" name="user"></p>
  11. <p><input type="password" name="pwd"></p>
  12. <p><input type="submit"></p>
  13. </form>
  14. </body>
  15. </html>

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


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

1、简单视图:

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

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

  1. from django.http import HttpResponse
  2. import datetime
  3.  
  4. def current_datetime(request):
  5. now = datetime.datetime.now()
  6. html = "<html><body>It is now %s.</body></html>" % now
  7. return HttpResponse(html)

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

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

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

3、Httpresponse函数

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

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

  1. def render(request, template_name, context=None, content_type=None, status=None, using=None):
  2. """
  3. Returns a HttpResponse whose content is filled with the result of calling
  4. django.template.loader.render_to_string() with the passed arguments.
  5. """
  6. content = loader.render_to_string(template_name, context, request, using=using)
  7. 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。

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

5、redirect 函数(重定向)

参数可以是:

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

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

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

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

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

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

6、render和resdirect的区别

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

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

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


注意:

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

  1. MIDDLEWARE = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. #'django.middleware.csrf.CsrfViewMiddleware', 就是这行
  6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  7. 'django.contrib.messages.middleware.MessageMiddleware',
  8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  9. ]

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

  1. 62、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. python全栈开发day85-查:数据表 数据头 增加列 展示多对多字段 反向解析编辑和删除按钮的url

    直接上代码: # spark/service/sites.py from django.conf.urls import url from django.shortcuts import HttpRe ...

  2. 未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序。

     问题描述:运行访问oracle数据库的.net程序时,弹出错误"未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序". 系统环境:windows server 2 ...

  3. python linux 源码安装Twisted

    下载:1.首先找到需要的包访问:https://pypi.org/在搜索框中输入你要查找的包名,然后点击搜索2.选择要下载的包的版本,点击download files3.选择file Type为sou ...

  4. 关闭PHP的opcache缓存

    1.使用phpinfo();查看配置信息 2.搜索Additional .ini files parsed 3.查看opcache安装目录 4.打开文件将   opcache.enable=1 改成  ...

  5. Java中常见的排序方式-快速排序(升序)

    [基本思想] 快速排序在元素较多的情况下,排序效率是相当高的.其基本思想是这样: 假设数组为int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, ...

  6. Python3爬虫知识点总结

    1.requests获取响应头的方法 eg:获取响应头信息 import requests res = request.head(url).headers print(res)

  7. quratz启动流程

    SchedulerFactory在创建quartzScheduler的过程中,将会读取配置参数,初始化各个组件. 1.启动流程图 2.ThreadPool 一般是使用SimpleThreadPool, ...

  8. Url地址重写

    一 什么是url重写URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.比如浏览器发来请求 hostname/101.aspx ,服务器自动将这个请求中定向为http://h ...

  9. mysql group_concat时间用法

    第一张表的worksId在第二张表中对应多条数据,需要将每条数据的日期作为结果查询出来,一个作为“初审时间”,另一个作为“复审时间”: 可以使用group_concat 和 group by 来进行分 ...

  10. javascript记忆

    Math.round()和ToFixed() Math.round(1.6)=2 Math.round(-1.4)=-1 var k = 1.74.toFixed(1), m = 1.75.toFix ...