• 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
  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/wangmengzhu/p/8336664.html
Copyright © 2020-2023  润新知