前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【运维工具】django学习笔记

【运维工具】django学习笔记

原创
作者头像
fankhu
发布2023-06-20 13:27:42
2100
发布2023-06-20 13:27:42
举报

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 Files\Django-1.3.1\django\bin
 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>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Chapter 1 简介
  • Chapter 2 开始Django
  • Chapter 3 动态网页基础
  • chapter 4 Django模版系统 Template System
  • Chatper 5 数据建模
  • Chatper 6 站点管理
  • Chapter 7 表单处理
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档