django之MTV模型(urls,view)
今天就进入到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',
]
django之MTV模型(urls,view)的更多相关文章
- 62、django之MTV模型(urls,view)
今天就进入到python最重要的阶段了django框架,框架就像胶水一样会将我们前面学的所有知识点粘合在一起,所以以前有哪些部分模糊的可以看看前面的随笔.本篇主要介绍djangoMTV模型,视图层之路 ...
- django 之MTV模型
一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...
- Django的MTV模型
MTV模型 Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性. MTV框架是Django的框架,三部分为: Model Template(模板) View ...
- Django【第1篇】:Django之MTV模型
Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...
- python框架Django中MTV框架之VIew(业务控制器)
MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...
- 初识DJango——MTV模型
一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...
- Django基础之MTV模型
一.Django基础 一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型(Model).视图(View)和控制器(Control ...
- Django的基本开发环境配置和MTV模型
一.MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的 ...
- Django框架(二) MTV模型简介
MTV模型 Django的MTV分别代表 Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM) Template(模板):放所有的html文件 模板语法:目的是将白变量(数据库的内 ...
随机推荐
- Genius ACM
题解: 发现匹配一定会选最大和最小匹配,确定左右端点之后nlogn排序后算 比较容易想到二分 最坏情况每次1个 $n^2*(logn)^2$ 没错暴力的最差复杂度是$n^2*logn$的 发现长度与次 ...
- 【Android】jar包Proguard混淆方法
本文章的前提条件是,读者已经掌握了正确导出jar包的技能. 1.拷贝Android项目中“proguard.cfg”文件到你指定的位置,并改名为“proguard.pro”,此步是为proguardg ...
- jmeter访问mysql数据库
jdbc:mysql://localhost:3306/jy?allowMultiQueries=true 如果想同时执行多条语句
- UOJ#53. 【UR #4】追击圣诞老人 树链剖分 k短路
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ53.html 题意 给定一棵有 n 个节点的树. 每一个点有一个权值. 对于每一个 $i$ 给定三个参数 ...
- POJ1330Nearest Common Ancestors
去博客园看该题解 题意 第一行输入T,有T组数据. 对于每组数据,给出一棵树,先输入n,然后n-1行,每行两个数a,b,表示a是b的父亲:第n行输入两个数A,B表示询问A和B的最近公共祖先. 题解 L ...
- day 42 mycql 数据类型
关于性别字段的存储数据类型选用 -- 性别字段 create table actor2 (id int not null auto_increment primary key,name char(32 ...
- 安卓开发中SpannableString之富文本显示效果
SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,不同的是SpannableString可以通过使用其方法 ...
- network is unreachable 网关PING不通解决办法
所里有几台机器没有办法ping通网关,但是ping交换机里的其它机器都可以ping通,其它机器ping网关也可以ping通.那么就排出了硬件的故障,主要问题就在问题机器的路由表上了. 看一下路由表 r ...
- 聊聊微服务熔断降级Hystrix
在现在的微服务使用的过程中,经常会遇到依赖的服务不可用,那么如果依赖的服务不可用的话,会导致把自己的服务也会拖死,那么就产生了熔断,熔断顾名思义就是当服务处于不可用的时候采取半开关的状态,达到一定数量 ...
- Django 学习第三天——模板变量及模板过滤器
一.模板路径的查找: 查找顺序:(现在哪找到就用那个) 首先在主目录的 setting.py 文件里的 TEMPLATES 中的 DIRS 里找: 其次如果 DIRS 中的 APP_DIRS : 'T ...