django学习(一)

最近所在小组人员扩张到8人,之前所用的email excel发报告和分配任务的方式显得非常凌乱和难以管理。
我打算用最近一直在使用的python做一个小小的工作流\excel管理网站。

第一步:做一个非常简单的web结构

1,运行 django-admin.py startproject mysite 命令在当前目录创建一个 mysite 目录。
2,启动服务python manage.py runserver
默认情况下只监听8080端口,且只响应来自本机的request.

指定端口:python manage.py runserver 8080
改变监听ip地址:python manage.py runserver 0.0.0.0:8080

3,动态视图:松耦合的view和url
urls.py被定义在setting.py里面
Root_URLCONF='mysite.urls'
然后在编辑urls.py为
from django.conf.urls.defaults import *
from mysite.views import current_datetime

urlpatterns = patterns('',
    (r'^time/$', current_datetime),
)
这里的^time/$开头和结尾都是严格定义。可以用正则来匹配。

4,模板系统
from django.template import Template, Context
t = Template('Your name is {{ name }}.')
t.render(Context({'var': 'hello'}))

非常简洁的模板的例子。template和context结构匹配,并且在template里面可以调用对应的对象的属性等。

{% block %} :表示block所表示的模板部分可以被子模板重载
{% extends "base.html" %}:继承 base.html模板
如果base.html包含{% block content %},则子模板中出现的{% block content %}是直接读取父模板被应用的部分?--达到“如果想进行站点级的设计修改,仅需修改 base.html ,所有其它模板会立即反映出所作修改”的效果?

5,和数据库打交道
django的MTV框架--Model->view->template呈现给用户

a,配置setting.py使本test网站认识数据库

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'c:\mysite\test.db'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''

b,建立一个app叫做books:python manage.py startapp books

c,打开books下的models.py,编辑成如下内容:
from django.db import models

class Publisher(models.Model):
    name = models.CharField(maxlength=30)
    address = models.CharField(maxlength=50)
    city = models.CharField(maxlength=60)
    state_province = models.CharField(maxlength=30)
    country = models.CharField(maxlength=50)
    website = models.URLField()

d,激活刚刚输入的模型
编辑setting.py INSTALLED_APPS = (
    'mysite.books',
)
e,用python manage.py validate命令来检查是否有语法错误
f,用python manage.py syncdb命令来同步生成setting里的model与数据库。它只在第一次生成的时候起作用。所以不用担心重复执行。
g,数据库的访问和修改:

>>> from books.models import Publisher
>>> p1 = Publisher(name='Addison-Wesley', address='75 Arlington Street',
...     city='Boston', state_province='MA', country='U.S.A.',
...     website='http://www.apress.com/')
>>> p1.save()

这短短几行代码干了不少的事。这里简单的说一下:
    *
      要创建对象,只需 import 相应模型类,并传入每个字段值将其实例化。
    *
      调用该对象的 save() 方法,将对象保存到数据库中。Django 会在后台执行一条 INSERT 语句。
    *
      使用属性 Publisher.objects 从数据库中获取对象。调用 Publisher.objects.all() 获取数据库中所有的 Publisher 对象。此时,Django 在后台执行一条 SELECT SQL语句。

讲的很清晰:)
为app books下的每个model对象添加一个函数
def __str__(self):
        return self.name

名字不能随便改,因为它是会被默认访问到,显示到cmd界面上

----
以上面的p1为例,它现在是一条Publisher数据,可以用p1.属性=“随意符合要求的值”然后p1.save()来更新数据库。
如果是用Publisher.objects.all()得到的对象是一个QuerySet 是一个记录集合。
Publisher.objects.filter(country="U.S.A.", state_province="CA")
Publisher.objects.get(name="Addison-Wesley")
Publisher.objects.order_by("name")
以上是一些可以调用的函数。

ps:QuerySet是没有save()函数可调的。如果是
p=Publisher.objects.all()
p[1].name='test'
p.save()
是会出错的
也许应该p[1].save()
---
修改表结构
app books里面的model可以看作是数据库的一个子集,它只在意它绑定的到相关的信息,并不会对数据库多出几个cloumn报错。

当我们处理表结构的修改时,要时刻想着 Django 的数据库层是如何工作的:
    *
      如果模型中包含一个在数据库中并不存在的字段,Django会大声抱怨的。这样当你第一次调用Django的数据库API来查询给定的表时就会出错(也就是说,它会在执行的时候出错,而不是编译的时候)
    *
      Django并不关心数据库表中是否存在没有在模型中定义的列
    *
      Django并不关心数据库中是否包含没有模型描述的表
修改表结构也就是按照正确的顺序修改各种Python代码和数据库本身

讲的很清晰:)


第一天先读到这里:)

你可能感兴趣的:(数据结构,django,python,Excel,配置管理)