从最简单的同学录入手

  每次放假回家组织同学聚会的时候都很麻烦,因为电话老换,查着也不方便,虽然qq上有联系人神马的,懒得用它,自己写个同学录吧。

  需求:开始我先做高中的同学的同学录,别的直接先不考虑,记录也很简单,姓名,性别,手机,qq,生日。

  看下MVC的图片,Django的更强调MTV,model,template,view。记得学长还在黑板上画过这个图,当时半模糊,先看看。

  

pytest post表单请求 pytest-django_django

  新建了一个AddressBook的项目,app是highschool,我是从model写起的,上代码先。

  

1 # -*- coding:utf-8 -*-
 2 from django.db import models
 3 
 4 class Record(models.Model):
 5     SEX_CHOICES = (
 6                     (u'男',u'男'),
 7                     (u'女',u'女'),
 8                   )
 9     name  = models.CharField(max_length = 40,verbose_name = "姓名")
10     sex   = models.CharField(max_length = 2,choices = SEX_CHOICES,verbose_name = "性别")
11     phone = models.CharField(max_length = 30,blank = True,null = True,verbose_name = "电话")
12     qq    = models.CharField(max_length = 30,blank = True,null = True,verbose_name = "qq")
13     birth = models.DateField(blank = True,null = True,verbose_name = "生日")
14 
15     def __unicode__(self):
16         return u'%s %s' %(self.name,self.phone)
17     class Meta:
18         ordering = ['name']
19         verbose_name = "记录"
20         verbose_name_plural = "记录"

  说明:

第一行的注释表示可以用中文(比如‘男’、’女‘,’性别’这些字),没有的话Django会报错的。

第二行导入from django.db import

然后是Record类,Django中,在model里面写的这些类会在数据库中生成相应的表,类后面需要传入参数(models.Model),因为用python 所以千万不要忘记:(冒号)和对齐,要不然就会有 IndentationError(缩进错误)。

      至于models.CharField和models.DateField是Django里面和数据库有关的一些属性,详情https://docs.djangoproject.com/en/1.3/ref/models/fields/

pytest post表单请求 pytest-django_ico_02

    

  如果你在站点管理里面添加数据时可以默认某一个域为空值(不是必填),blank = True,null = True,这两个参数加上。

verbose_name是我重点想说的,因为当时找了好久,这个在站点管理里面现实,没有的话默认是英文的一些东西。

pytest post表单请求 pytest-django_数据库_03

 

"姓名"(没有这个),默认现实是name而不是姓名,受影响的是下图这里:

pytest post表单请求 pytest-django_django_04

 

第19行的 verbose_name = "记录"

 

pytest post表单请求 pytest-django_django_05

第20行的 verbose_name_plural = "记录",这个是站点管理的根目录Highschool这里的记录

 

pytest post表单请求 pytest-django_django_06

  可以看到,里面还有一些东西是英文的,比如Auth,Highschool,sites,我没有找到用哪个属性可以更改。

__unicode__,这个函数是一定要写的,它返回一个对象的描述。怎么说呢,看上图中有个‘我的动作’,里面加号后面就是对象的描述,因为我返回的是return u'%s %s'

class Meta:是这个类的一些特殊描述。详情https://docs.djangoproject.com/en/1.3/ref/models/options/

  至于站点管理,下次讲url.py时再说。