zoukankan      html  css  js  c++  java
  • python Web开发框架-Django (1)

    以前用web.py(另外一款轻量级web开发框架)做一个监控管理平台,没有做特别的记录就不好拾起来。最近做一个日志聚合系统,使用的是django,这次就记下来,方便查询。

    Django是一个高效的web开发框架,上手容易,便于调试和发布。

    设计模式

    它的设计遵循经典的web设计架构-MVC(Model-view-controller),一个应用分为四部分:

    • models.py:文件主要用一个 Python 类来描述数据表。 称为 模型(model) 。本文不对model做详细介绍,数据库的存取是单装了mysql,自己做的dao。
    • views.py:文件包含了页面的业务逻辑。是模板和模型间的桥梁,接收前端url请求,进行业务逻辑实现,最后返回数据(结果或模板)。
    • urls.py:一个配置文件,用于映射 URL到视图。
    • xxx.html: html 模板,它描述了页面设计,支持简单的模板语言。

    环境准备

    python & django,本文使用的是python-2.7.9,django-1.7.6

    模板语言

    在html中使用模板语言定义页面框架和内容,后台由模板引擎渲染成完整的html。{% %}用于逻辑控制,{{}}用于变量引用

    模板间关系

    • include:{% include 'nav.html' %},引入布局单元
    • 模板继承:定义一个基础模板(定义页面框架),由子模板来继承(填充个性化页面子块)。基础模板使用block标签-{% block %},每个block下的这一块内容将有可能被子模板覆盖。子模板用extends标签来继承基础模板{% extends "base.html" %}。
    //base.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html lang="en">
    <head>
        <title><strong>{% block</strong> title <strong>%}{% endblock %}<</strong>/title>
    </head>
    <body>
        <h1>My helpful timestamp site</h1>
        {% block content %}{% endblock %}
        {% block footer %}
        <hr>
        <p>Thanks for visiting my site.</p>
        {% endblock %}
    </body>
    </html>
    //子模板 current.html
    <strong>{% extends "base.html" %}
    
    {% block title %}</strong>The current time<strong>{% endblock %}</strong>
    
    {% block content %}
    <p>It is now {{ current_date }}.</p>{% endblock %}

    基本控制标签

    • {% if %} {% else %} {% endif %}:支持and/or/not关键字,不支持and/or组合,不支持用圆括号来组合比较操作,不支持 elif
    • {% for %}{% endfor %}:循环语法是 for X in Y 
    • {% ifequal %}{% endifequal %}或者ifnotequal:只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数
    • {{var|op}}:模板过滤器,在变量被显示前修改它的值。op有lower/upper/length/join等操作

    补充:python中空列表、空元组、空字典、空字符串、0、None对象、False对象代表布尔值假,其余都是真布尔值。

    相关技术点

    前端页面:HTML、JavaScript、HTML DOM、JQuery、ajax、JSON

    后端逻辑:python

    页面模板:建议网上找基于bootstrap的网页模板

    实例流程

    项目创建

    django-admin.py startproject tulip

    获得如下的目录,manage.py/__init__.py/wsgi.py不需要修改,另外手动创建static目录用于保存js/css,创建templates用于保存html模板,创建lib用于保存依赖库

    tulip/
        manage.py
        tulip/
            __init__.py
            settings.py
            urls.py
            wsgi.py
            static/
            templates/

    配置修改

    我们新增templates/static目录,在模板中想要正确引用,需要修改下django settings.py

    BASE_DIR = os.path.dirname(__file__)
    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static').replace('\','/'),
    )
    TEMPLATE_DIRS = (
        os.path.join(BASE_DIR, 'templates').replace('\','/'),
    )
    TIME_ZONE = 'Asia/Shanghai' #语言指定为中文

    在页面中就可以如下引用js或者css

    <script src="/static/js/jquery-1.10.2.js"></script>
    <link href="/static/css/bootstrap.css" rel="stylesheet">
    

    python返回html也可以直接写html文件名,不用加templates 

    逻辑实现

    写页面

    //search.html
    <select id="servicename" class="form-control" onchange="getServiceInfo()">
    <option value="">应用服务</option>
    {% for service in servicenames %}
    <option>{{ service }}</option>
    {% endfor %}
    </select>
    

    配置urls.py

    from django.conf.urls import patterns, include, url
    urlpatterns = patterns('tulip',//tulip是模块名,作为后续映射路径的共同前缀
    url(r'^$', 'searchText.index'),
    )

    视图逻辑

    //searchText.py
    from django.shortcuts import render_to_response
    from django.http import HttpResponse
    def index(request):
        dao = TulipDao()
        servicenames = dao.getServicenames()
        return render_to_response('search.html', locals())
        #或者return render_to_response('search.html',{'servicenames':servicenames})
        #locals()返回的字典包含所有局部变量的名称与值的映射   

    启动应用

    python manage.py runserver 0.0.0.0:8000 //0.0.0.0允许任意非本地连接,不指定ip则仅监听本地连接

    文章太长了,再分一篇吧,下一篇记录一些技巧和参考资料

  • 相关阅读:
    SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用
    TCP/IP、UDP、 Http、Socket的差别
    HttpClient 图讲解明
    数据库设计--数据的垂直拆分
    未经处理的异常在 System.Data.dll 中发生。其它信息:在应使用条件的上下文(在 &#39;***&#39; 附近)中指定了非布尔类型的表达式。
    VMware 下扩展linux硬盘空间
    cocos2d_android 第一个游戏
    解决安卓程序安装没图标的问题
    Qt编译错误GL/gl.h: No such file or directory
    【编程题目】二元树的深度
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981962.html
Copyright © 2011-2022 走看看