每日一记======>Django 2012.08.21

 初步做一个django-powerd界面步骤:

  1. #django.admin.py start project mysite 建立一个工程,工程名字里边的属于django的东西

  2. 在url窗口输入地址如/hello/ 进来的请求转入

  3. manage.py 这个文件首先读的是setting.py这个设置文件,包括ROO_URLCONF等等

  4. django 在URLconf中所有URL模式中,查找第一个匹配/hello/的条目。

  5. 找到匹配的话调用相应的视图,没有的话 返回默认。

  6. 视图函数返回一个HttpResponse

  7. Djnago转换HttpResponse为一个适合的HTTP response,以web page 显示出来。

        在建立的过程中,mysite中的urls中可以引入我们开启的app中的urls,只需要include('polls.urls') 即可, 同时将其复制到app中,在app中 修改这个urls文件,然后配置就可以了,注意syntax error 这个语法错误,即方法和include当中都要用单引号,还要注意复制的过程,一般自己建立的话会提示找不到polls。

        URLconf中正则表达式的使用:

 

  1. . 任意单一字符

  2. \d 任意一位数字

  3. + 匹配一个或者更多

  4. {1,3} 介于一个到三个之前的表达式 e.g. \d{1,3} 匹配一个或两个或者三个数字

  5. [a-z] 任意其中一个字符

  6. [^d]+ 一个或者多个不为d的字符

  7. ? 0个或者一个之前的表达式 \d? 匹配0个或者一个数字

  8. *  0个或者更多 

MODEL 模型———————————————————————————————————————————————————————————————————————————————

第一个应用程序:

        Project和app的区别,一个是配置一个是代码:一个project包含多个django app以及对它们的配置。Project提供配置文件,比如哪里定义数据库连接,安装的app列表,TEMPLATE——DIRS等等。一个app是一套django功能的集合,通常包括模型和视图,按着Python包的结构方式存在。app的关键点是他们 可以移植到其他Project中被复用。如果建造一个许多不相关模块的复杂的网站,例如电子商务和社区之类的站点,需要把这些模块划分不同的app,以便以后复用。

       系统对app有一个约定:如果你使用来django的数据库模型,必须建立一个django app。模型必须放在apps中。

       在Python代码里边定义模型:

       django模型是用python代码形式表述的数据在数据库中的定义,对数据库层面来说它等同于CREATE TABLE语句,只不过执行的是python代码而不是SQL,而且还包含了比数据库字段定义更多的含义。django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。django也使用模型来呈现SQL无法处理的高级概念。

        django提供了实用工具来从现有的数据库表中自动扫描生成模型。这对已有的数据库来说是非常快捷有用的。

      

        每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。属性名就是字段名,类型相当于数据库的字段类型。每个数据库表对应一个类“这条规则例外情况是多对多的关系”。例如,book有一个多对对字段,表明一本书籍有一个或者多个作者,但book数据库表并么没有authors字段。相反,django创建一个额外的表(多对多连接表)来处理书籍和作者之间的映射关系。我们并没有显示的为这些模型定义任何主键,django自动生成一个自增长的主键字段每个django模型都要求有单独的主键id。

        syncdb  命令并不能将模型的修改或删除同步到数据库;如果修改或删除一个模型,并提交到数据库,syncdb不会做任何处理。

 

        当我们打印publishe列表的时候没有得到有用的信息,需要添加方法__unicode__(),  这个方法告诉Python如何将对象以unicode方式显示出来。   可以进行任何处理来返回一个对象的字符串表示。必须返回一个unicode对象才行。unicode对象就是一个python字符串,可以处理不同类别的字符。

         django的模型不只是为对象定义了数据库表的结构,还定义了对象的行为

 

        filter() 数据过滤  get()获取单个对象,结果是多个对象的话,会抛出异常,查询没有返回结果也会抛出异常;DoNotExist异常是publisher这个model类的一个属性,即,publisher.DoNotExist。在应用中可以捕获并且处理这个异常:

1 try:
2     p = Publisher.objects.get(name='Apress')
3 except Publisher.DoesNotExist:
4     print "Apress isn't in the database yet."
5 else:
6     print "Apress is in the database."

        数据排序 :希望根据某个子段的值对检索结果排序,使用order_by(),publisher.objects.order_by("name") 如果多个子段为准进行排序,多加参数就行了。子段前边加鉴号的好是逆向排序。指定缺省的排序方式如下:

 1 class Publisher(models.Model):
 2     name = models.CharField(max_length=30)
 3     address = models.CharField(max_length=50)
 4     city = models.CharField(max_length=60)
 5     state_province = models.CharField(max_length=30)
 6     country = models.CharField(max_length=50)
 7     website = models.URLField()
 8 
 9     def __unicode__(self):
10         return self.name
11 
12     **class Meta:**
13         **ordering = ['name']**

        class Meta:  ordering = ['name'] 内嵌于Publisher这个类中,要一定有缩进,用它来设定一些与特殊模型有关的选项。

        连锁查询,链式的形式,publisher.objects.filter(country="usa").order_by("-name")

        限制返回的数据:列表裁剪语句,例如,order_by('name')[0:2],但是不支持负索引。

        更新多个对象,save方法会更新一行里边所有的列,某些情况只需要更新需要的列就行了。更改某一列,我们可以调用结果集(QuerySet)对象的update()方法: publisher.objects.filter(id=52).update(name = 'sdhhfisf') 这样就不会引起竞态条件。返回一个整数值,表示受影响的记录条数。

        删除对象:delete() 调用对象的这个方法就行了。删除所有数据的时候要加上all(),删除部分的话,publisher.objects.filter(country='usa').delete()

       手工录入数据的方法,django管理界面!!!

Django 站点管理———————————————————————————————————

        管理界面有一个问题:创建它太繁琐,开发对公众的功能的时候,网页开发是有趣的,但是创建管理界面通常是千篇一律的。必须认证用户,显示并管理表格,验证输入的有效性等,很繁琐,是重复劳动。django的自动管理界面,它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作。

        django.contrib包, 是一个庞大的功能集,django 基本代码的组成部分,django 框架就是由众多包含附加组件的基本代码构成的。与django捆绑在一起,可以看作是可选的Python标准库的实际实现。django自带的优秀组件,都在django.contrib中。

        python manage.py createsuperuser 创建超级用户。

1 Exception Type:    DatabaseError
2 Exception Value:    
3 no such column: books_publisher.website

        websit 是列名,当初写的时候,应该写website ,但是同步以后再修改发现,出现了这种错误,所以,这个时候。怎么修改列名?????????

posted @ 2012-08-21 18:10  事件轮询,回不到过去  阅读(418)  评论(0编辑  收藏  举报