zoukankan      html  css  js  c++  java
  • Django基础

    Diango中的MTV模型


         Django是python的web开发框架,遵循MVC的设计模式,但在Django中通常称为MTV(model-template-views)。model是数据持久层,主要存放实体映射、实体关系以及实体的一些方法。template是表示层,主要是用来显示数据,Django的视图引擎可以将其渲染成HTML并显示。views是业务逻辑层,在Django中充当着链接model与template的桥梁,处理模型并向template提交数据,同时也接受template的请求和参数,完成相应的逻辑后提交模型修改。    

    Django的MTV分别代表:

    Model(模型):负责业务对象与数据库的对象(ORM)

    Template(模块):负责如何把页面展示给用户

    View(视图):负责业务逻辑,并在适当的时候调用Model和Template

    此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Templates

    模板语法继承


         Django模版引擎中最强大也是最复杂的部分就是模版继承了。模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
        下面通过实例来解释模板继承:
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style>
     7         *{
     8            margin: 0;
     9         }
    10         .con{
    11             width: 100%;
    12             height: 30px;
    13             background-color: aqua;
    14         }
    15         .left,.right{
    16             float: left;
    17         }
    18         .left{
    19             width:20%;
    20             height: 600px;
    21             background-color: deeppink;
    22         }
    23         .right{
    24             width: 80%;
    25             height: 600px;
    26         }
    27     </style>
    28 </head>
    29 <body>
    30     <div class="con"></div>
    31     <div class="left"></div>
    32     <div class="right">
    33         {% block con %}
    34 
    35         {% endblock %}
    36     </div>
    37 
    38 </body>
    39 </html>
    base.html

    base.html表示的是母版,其他的模板可以继承母版,继承的语法如下:

    {% extends 'base.html' %}
    
    {% block con %}
        <p>这是一个登陆界面</p>
    {% endblock %}
    preindex.html

    这里是使用继承的一些提示:

    • 如果你在模版中使用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。

    • 在base模版中设置越多的 {% block %} 标签越好。请记住,子模版不必定义全部父模版中的blocks,所以,你可以在大多数blocks中填充合理的默认内容,然后,只定义你需要的那一个。多一点钩子总比少一点好。

    • 如果你发现你自己在大量的模版中复制内容,那可能意味着你应该把内容移动到父模版中的一个 {% block %} 中。

    • If you need to get the content of the block from the parent template, the {{ block.super }} variable will do the trick. This is useful if you want to add to the contents of a parent block instead of completely overriding it. Data inserted using {{ block.super }} will not be automatically escaped (see the next section), since it was already escaped, if necessary, in the parent template.

    url反向解析


        在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。 人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。 换句话讲,需要的是一个DRY 机制。除了其它有点,它还允许设计的URL 可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。
        获取一个URL 最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL 的其它必要的信息有视图参数的类型(位置参数、关键字参数)和值。 Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它: 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。 第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。 在需要URL 的地方,      对于不同层级,Django 提供不同的工具用于URL 反查:
    • 在模板中:使用url 模板标签。
    • 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
    •  在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。

    代码展示:

     1 login.html
     2 
     3 def login(request):
     4     if request.method=='POST':
     5         username=request.POST.get('username')
     6         pwd=request.POST.get('pwd')
     7         return HttpResponse('登陆成功')
     8     else:
     9         return render(request,'login.html')
    10 
    11 
    12 login.html
    13 
    14 <!DOCTYPE html>
    15 <html lang="en">
    16 <head>
    17     <meta charset="UTF-8">
    18     <title>Title</title>
    19 {#    <link href="">#}
    20     <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css">
    21 </head>
    22 <body>
    23 <form class="form-horizontal" method="post" action="{% url 'LOGIN' %}">
    24     <div  style="margin: 80px 100px">
    25   <div class="form-group">
    26     <label for="t1" class="col-sm-2 control-label">用户名</label>
    27     <div class="col-sm-10">
    28       <input type="text" class="form-control" id="t1" name="username">
    29     </div>
    30   </div>
    31   <div class="form-group">
    32     <label for="t2" class="col-sm-2 control-label">密码</label>
    33     <div class="col-sm-10">
    34       <input type="password" class="form-control" id="t2" name="pwd">
    35     </div>
    36   </div>
    37     <div class="col-sm-offset-2 col-sm-10">
    38       <button type="submit" class="btn btn-default">登陆</button>
    39     </div>
    40   </div>
    41     <p>爱好<div><input type="checkbox" name="hobby" value="1">篮球</div>
    42            <div><input type="checkbox" name="hobby" value="2">足球</div>
    43            <div><input type="checkbox" name="hobby" value="3">排球</div>
    44     </p>
    45     <select name="pro">
    46         <option value="111">河北省</option>
    47         <option value="222">河南省</option>
    48         <option value="333">湖南省</option>
    49     </select>
    50     </div>
    51 </form>
    52 </body>
    53 </html>
    54 
    55 
    56 
    57 urls.py
    58 
    59 url(r'login/',views.login,name='LOGIN'),
    View Code
  • 相关阅读:
    UVA 10827 Maximum sum on a torus 最大矩阵和
    UVA 11100 The Trip, 2007 水题一枚
    编程之美2015测试赛 题目1 : 同构
    UVA 10801 Lift Hopping Floyd
    UVA 11389 The Bus Driver Problem 贪心水题
    UVA 11039 Building designing 贪心
    UVA 11636 Hello World! 水题
    poj 3070 Fibonacci 矩阵快速幂
    hdu 1757 A Simple Math Problem 矩阵快速幂
    了解常见的 Azure 灾难
  • 原文地址:https://www.cnblogs.com/wangmengzhu/p/8336664.html
Copyright © 2011-2022 走看看