【运维工具】django学习笔记

2023-06-20 13:27:42 浏览数 (2)

Chapter 1 简介

Django:一款能够节约你的时间并且让开发乐趣横生的python web开发框架。

Web框架:将动态web开发中的一些通用开发步骤抽象后形成的组件或类库。

Chapter 2 开始Django

1 安装python

1.1 windows下python安装好后,配置windows环境变量

> 我的电脑-属性-高级系统设置-环境变量-系统变量

> 给Path变量添加python安装路径,如D:Python27

1.2 可在eclips下通过pydev组件进行python开发。

2 安装django (windows)

2.0 确保已装python

2.1 下载安装包,解压

2.2 cmd模式进入django目录,执行 python setup.py install

2.3 检查,打开python解释器

>>> import django

>>> django.VERSION

2.4 eclipse中也可添加django插件,方便开发。

3 安装数据库

3.1 这里选择mysql

3.2 推荐安装DB管理工具Navicat for MySQL

4 建立一个django工程

4.1 命令行方式:

代码语言:javascript复制
# windows中,添加django管理工具脚本的环境变量 如:D:Program FilesDjango-1.3.1djangobin
 cmd > django-admin.py startproject mysite 
# 命令在当前目录创建一个 mysite 目录

# 此时mysite目录中包含4个文件

代码语言:javascript复制
                mysite/
                    __init__.py   # 让python把本目录当成一个开发包
                    manage.py     # 命令行工具,可让你与django交互
                    settings.py   # 配置文件(多读几遍该文件)
                    urls.py       # url声明

4.2 eclipse 方式

# 建立一个以mystie命名的django工程即可 File - New -Project - Pydev - Django Project

4.3 运行 (django内置了一个测试用web server)

#运行 python manage.py runserver 命令

# 打开http://127.0.0.1:8000/

# 在eclipse中右键工程目录,run as - pydev django

Chapter 3 动态网页基础

0 怎么做一个 Django-powered 页面?

只需要写视图函数并用 URLconfs把它们和URLs对应起来。

1 视图文件views.py

视图函数(或 视图 ),是一个接受 Web 请求并返回 Web 响应的 Python 函数。

2 URLconf --urls.py

代码语言:javascript复制
      # URLconf的本质是一个映射表,将web目录与视图函数对应起来。
      # 对于一个url调用一个视图函数时要先保证已经import了该视图函数。
        from django.conf.urls.defaults import *
        from mysite.views import current_datetime

        urlpatterns = patterns('',
        (r'^time/$', current_datetime),
        )

# url中的正则表达式

代码语言:javascript复制
        . (dot) 任意字符 
        d 任意数字 
        [A-Z] 任意字符, A-Z (大写) 
        [a-z] 任意字符, a-z (小写) 
        [A-Za-z] 任意字符, a-z (不区分大小写) 
          匹配一个或更多 (例如, d  匹配一个或多个数字字符) 
        [^/]  不是/的任意字符 
        * 匹配0个或更多 (例如, d* 匹配0个或更多数字字符) 
        {1,3} 匹配1个到3个(包含) 

chapter 4 Django模版系统 Template System

将python代码编写与html设计分离,让代码易于维护。

使用Django模板系统的基本规则:写模板,创建 Template 对象,创建 Context ,调用 render() 方法。

1. 模板系统基本知识

代码语言:javascript复制
            #模板是一段添加了些许变量和模板标签的基础 HTML 
            
            变量: {{ variable}}
            
            控制语句: {% if something %}       {% endif %}

                      {% for item in list %}   {% endfor %}
                      
                      {% ifequal var currnetuser %}<h1>Welcome</h1>{% endifequal %}
                      
            过滤器: 如 {{ship_date|date:"F j, Y" }} (后续深入了解)
            注释: {# hi #}

2 如何使用template

2.1 创建一个Template对象

Template 类就在 django.template 模块中

2.2 调用Template对象的render()方法并提供变量。

3 模版设计哲学

# 业务逻辑与表现逻辑分离

# 语法不受HTML/XML束缚

# 假定设计师精通HTML,假定设计师不是python程序猿

# 目标并不是发明一种变成语言

4 模版加载

通常模版被保存于磁盘文件中,为减少每次调用模版的冗余代码,Django提供了一种API。

代码语言:javascript复制
           4.1,应告诉框架模版的保存位置。
              setting.py中
                   TEMPLATE_DIRS=(
                        '/home/django/mysit/templates', # 可指定任意位置
                推荐:
                    import os.path
                    TEMPLATE_DIRS=(
                       os.path.join(os.path.dirname(__file__),'templates').replace('\','/'),
                       )
                       # 该例python内部变量__file__被自动设为代码所在的模块文件名

4.2 建立模版文件

4.3 在视图文件中载入模版文件current_datatime.html

代码语言:javascript复制
                    django.template.loader.get_template()
                或
                    from django.template.loader import get_tempalte
                    t=get_template('dateapp/current_datetime.html') # dateapp表示在模版目录templates中还有子目录

5 优化

代码语言:javascript复制
           5.1  render_to_response
           # 用一行代码来完成加载模版,填充context,返回httpresponse对象
           
           如:render_to_response(template_file,context_dictionary) 
           
           from django.shotcuts import render_to_response
           import datetime
           def current_time(requset):
              now=datetime.datetime.now()
              return render_to_response('current_datetime.html',{'time':now})

5.2 locals()技巧

代码语言:javascript复制
 函数中的变量和模版中命名相同,在render_to_response中使用local()方法填充模版。
                    
 time=datetime.datetime.now()
 return render_to_response('current_datetime.html',locals())

6 模版继承

先构造一个基础模版框架,然后在其子模板中对它进行重载。

代码语言:javascript复制
6.1 建立基础模版
     base.html
      <html>
            {%block title%}{%endblock%}
       </html>        
 注意:不可在同一模版中定义多个同名block            

6.2 继承模版

代码语言:javascript复制
                {% extends "base.html"%}           # extend关键字用来声明继承模版
                {%block title%}The current time{% endblock %}    

Chatper 5 数据建模

1 MTV

Moder 模型:数据存取层

Template 模版: 表现层

View 视图: 业务逻辑层

2 models.py

代码语言:javascript复制
      ##建表
        from django.db import models
        # Create your models here.
        class Publisher(models.Model):
            name = models.CharField(max_length=30)
            address = models.CharField(max_length=50)
            city = models.CharField(max_length=60)
            state_province=models.CharField(max_length=30)
            country = models.CharField(max_length=50)
            website = models.URLField()
            flag = models.BooleanField(u"是否标记", default=False)
            def __str__(self):
                return self.name

##插入

代码语言:javascript复制
        p1 = Publisher(name='tim',address='street road',city='NY',
               state_province='guangdong',country='U.S.A',
               website='www.fankhu.com')
        p1.save()

##修改

代码语言:javascript复制
        p1.website='www.tim.com'   # 

##查询

代码语言:javascript复制
        s1=Publisher.objects.filter(name='tim')
        print s1.name,s1.address
        
        s2=Publisher.objects.all()
        for i in s2:
           print i.name,i.country
      

##删除

代码语言:javascript复制
        s2.delete()

##排除 & 排序

代码语言:javascript复制
      ops_instance = Ops.objects.filter(biz__cc_id = biz_cc_id).exclude(status=0).order_by('-end_time')

Open_history.objects.exclude(status__in=[0,3]).exclude(process_code=1) #两个exclude表示 排除条件是与关系,如果exclude里有多条字段,则字段间是或的关系

Chatper 6 站点管理

1 取消注释:url.py中

代码语言:javascript复制
                admin.autodiscover()
              setting.py INSTALL_APPS中
                 django.contrib.auth
                 django.contrib.sessions
                 django.contrib.contenttypes

2 激活站点管理

代码语言:javascript复制
           新建admin.py
             from books.models import Publisher
             from django.contrib import admin
                              
             admin.site.register(Publisher)    
        # 此时在admin界面就可以对数据库进行操作

Chapter 7 表单处理

1 在views.py中定义表单处理视图

代码语言:javascript复制
       from django.db.models import Q
     from django.shortcuts import render_to_response
     from models import Book
     ...
     def search(request):                 # request对象,浏览器发送过来的请求对象
        query = request.GET.get('q','')   #  q html页面中定义的参数名
        
        ...                               
        results = Book.objects.filter(qset).distinct()        # 数据处理逻辑
        
        return render_to_response("book/search.html",{    # template模板
                                              "result": results,
                                              "query": query,
                                              })

2 技巧:在POST之后立即重定向

3 从模型创建表单

代码语言:javascript复制
       #定义表单 forms.py
       
       from django import forms
       from models import Publisher
       from django.forms import ModelForm
       
       class PublisherForm(ModelForm):
           class Meta:
               model=Publisher
        
       
    
       # views.py
       from books.models import  Publisher
       from forms import PublisherForm
       from django.template import RequestContext
       from django.http import HttpResponseRedirect
       
       def add_publisher(request):
            if request.method == 'POST':
                form = PublisherForm(request.POST)
                if form.is_valid():
                    form.save()
                    return HttpResponseRedirect('/time/')
            else:
                form =PublisherForm()
            return render_to_response('add_publisher.html',{'form':form},
                                      context_instance=RequestContext(request))  #CSRF设置,否则报错 ??                             

#视图函数add_publisher.html

代码语言:javascript复制
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
        <html lang='en'>
        <head>
            <title>add_publisher</title> 
        </head>
        <body>
            <h1>Add publisher</h1>
            <form action="." method="POST">
                {% csrf_token %}      # CSRF设置,否则报错
                <table>
                    {{ form.as_table}}
                </table>
                <p><input type="submit" value="submit"></p>
            </form>
        </body>
        </html>

0 人点赞