• MTV模型—urls和view


    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
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    PHP学习
    python获取命令行参数 启动文件
    SQLServer中char、varchar、nchar、nvarchar的区别
    VBA
    python 爬虫资料
    python乱码问题之爬虫篇
    angularjs component
    通过jQuery Ajax使用FormData对象上传文件
    directive完成UI渲染后执行JS
    交易日志
  • 原文地址:https://www.cnblogs.com/tangjianyu/p/8018742.html
Copyright © 2020-2023  润新知