码迷,mamicode.com
首页 > Web开发 > 详细

MTV模型—urls和view

时间:2017-12-11 01:00:00      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:控制   article   pattern   rect   rtc   lex   基本   一个个   es2017   

Django的MTV分别代表:
       Model (模型):     负责业务对象与数据库的对象(ORM)
       Template (模版):负责如何把页面展示给用户
       View (视图):       负责业务逻辑,并在适当的时候调用Model和Template
     此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
技术分享图片
 
一、URL控制器
urls.py 文件
1、基本配置
url(r‘^index/‘, views.index)
url:匹配的是url的路径部分
 
通常会添加1个
url(r‘^$/‘, views.index),
在访问时,如果只有域名,没有路径会找到index    //127.0.0.1:8080
1 一旦匹配成功则不再继续
2 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。分组
3 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
4 每个正则表达式前面的‘r‘ 是可选的但是建议加上。
 
2、分组
用来捕获URL 中的值
捕获的参数永远是字符串
无名分组
url(r‘^articls/(\d{4})/(\d{2})$‘, views.archive),
以位置参数传递给视图:def  archive1(request,a,b):
 
有名分组
url(r‘^articls/(?P<y>\d{4})/(?P<m>\d{2})$‘, views.archive2),
作为关键字参数传递给视图函数:def archive2(request,y,m):
 
3、反向解析URL 
name参数,别名
url(r‘^login/‘, views.login,name="Login"), 
 
在template里:
<a href={% url ‘Login‘ %}>click</a>
这样做的好处:
    通常1个 r‘^login/‘ 对应很多html的很多地方
    在url里修改 正则 r‘^login/‘时,不用再去修改 html里的表单等url了
 
4、include
当url 比较多,容易混乱时,可以用include方法来配置
from django.conf.urls import url,include
urlpatterns = [
    url(r‘^app01/‘,include(‘app01.urls‘)),
]
 
 
要在app01的文件中创建urls
 
用户请求的url 也要是app01 开头
 
 
 
二、View (视图)
 
后端逻辑,返回响应
 
1、request学过的方法:
request.method              --> 获取具体的请求方法:GET/POST等
request.POST.get()         --> 取提交的数据里面的参数  #get("key",1)取key值,如果没有则取到1
request.POST.getlist()     --> 提交的是列表的数据类型
request.GET.get("key")      --> 取URL里面的参数
request.GET.getlist("key")  --> 取值,值为列表
 
request.COOKIES.get("key")  --> 获取具体的cookie值
request.session
 
request.get_full_path()    --> 获取请求的URL(包括后边的?)
request.path_info            -->取到要访问目录的,"/index/",不包括后边的?参数等
request.path                   -->同path_info
 
request.body                  -->字节串,表请求报文的主体。在处理非 HTTP 形式的报文时非常有用,例如:二进制图片、XML,Json等。
 
request.is_ajax()            -->判断是不是ajax请求
 
request.FILES            --->类似于字典的对象,包含所有的上传文件信息。
#注意,FILES 只有在请求的方法为POST 且提交的<form> 带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。
 
 
2、新手三件套
 
from django.shortcuts  import  HttpResponse   
# 直接返回字符串内容时,用return HttpResponse("字符串")
 
from django.shortcuts  import  render
#渲染
返回html的文件时,return  render(request,"login.html",)
传参时:return  render(request,"login.html",{"user_lst":变量名})  
 
from django.shortcuts  import redirect
#重定向  return redirect("http://www.oldboyedu.com";) 可以绝对或相对
 
 
render 渲染
render(request, template_name[, context])
 
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
是在返回前就已经渲染完毕了
 
render(request, ‘xx.html‘,locals()) #把当前函数里的所有局部变量都传进去
 
#本质是:
t=Template("<html><body>当前时刻:{{current_date}}</body></html>")
c=Context({"current_date":c})
html=t.render(c)
 
return HttpResponse(html)
 
redirect 重定向到某个路径
 
两次请求过程
可以在浏览器的控制窗口Network 看到两次请求的过程
技术分享图片
render 和 redirect的区别
 
技术分享图片技术分享图片

 

登录时,经历的过程:
第一次请求:
    请求url: http://127.0.0.1:8000/login.html/      GET     无请求数据
    login.html/-------> views.login------>login()
    响应到一个login.html页面
 
第二次请求:
    请求url: http://127.0.0.1:8000/login.html/     POST    有请求数据  {"user":"alex","pwd":"123"}
    login.html/-------> views.login------>login()
    响应的return redirect("/index/")到浏览器,通知浏览器再发送请求:"/index/"    
 
第三次请求:
    请求url: http://127.0.0.1:8000/index/       get请求   没有数据
    index/ --->url(r‘^index/‘, views.index),---->index()              
    响应一个index.html
技术分享图片

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

MTV模型—urls和view

标签:控制   article   pattern   rect   rtc   lex   基本   一个个   es2017   

原文地址:http://www.cnblogs.com/tangjianyu/p/8018742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!