pycharm开发django基本用法
-
Tools —> run manager.py task 进入命令行模式
-
runserver 0.0.0.0:8000 启动项目
-
startapp web22 创建web22这个app
-
syncdb 同步数据库(1.7以前的版本)
-
makemigrations
migrate 同步数据库(1.7以上版本)
-
shell 进入shell模式(可以测试数据库等连接)
增: models.userinfo.objects.create(username='hanerhui',password='tuyougame',age='25’) dic={'username':'xiaoyuelin','password':'tuyougame','age':23} models.userinfo.objects.create(**dic) 导入字典里的内容 删: models.userinfo.objects.filter(username='xiaoyuelin').delete() 改: models.userinfo.objects.filter(username='hanerhui').update(age='26’) 查: models.userinfo.objects.filter(username=‘hanerhui') 模糊匹配: a=models.userinfo.objects.filter(username__contains='han’) a[0].username 返回所有数据: models.userinfo.objects.all()
基本模型
-
models.py示例
class Book(models.Model): isbn = models.IntegerField() name = models.CharField(max_length=100) price = models.FloatField() def __unicode__(self): #py3 def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __unicode__(self): return str(self.age)
-
在shell模式下调试(python manage.py shell)
增 insert:
#方法1: from books.models import * a=Author(name='hanerhui',age='25') a.save() #方法2: p1 = Author() p1. name='zhangsan' p1.age =30 p1.save() #方法3: Author.objects.create(name='zhangsan',age=30) #方法4: 这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False. Author.objects.get_or_create(name='zhangsan',age=30)
查 select:
#获取一个记录对象 Author.objects.get(name="zhangsan") --select * from books_author where name='zhangsan' #获取所有记录对象 Author.objects.all() -- select * from books_author #输出所有数据 list=Author.objects.all() for var in list: respinse1 += var.name + " " reponse = reponse1 return HttpResponse("<p>" + response + "</p>") #获取满足某些条件的记录对象 名字包含zhang: Author.objects.filter(name__contains="zhang") ——相当于 select from ... where name LIKE '%zhang%'; #排序 Author.objects.order_by("name") ——相当于 select from ... ORDER BY name; 多项排序: Author.objects.order_by("age", "name") 逆向排序: Author.objects.order_by("-name") 连锁查询: Author.objects.filter(age=30).order_by("-name")
改 update:
#save方法 p = Author.objects.get(name='Zhangsan') p.name = 'zhangsan' p.save() #update()方法 Author.objects.filter(name='Zhangsan').update(name='zhangsan') #对多行同时操作 Author.objects.all().update(country='USA')
删 delete:
#删除对象 p = Author.objects.get(name="O'Reilly") p.delete() #删除all Author.objects.all().delete()
字段类型与方法
-
字段类型与方法
字段名 方法 说明 Int IntegerField 表示的范围是 -2147483648-2147483647 smallint SmallIntegerField 表示的范围是 -32768-32767 int unsigned PositiveIntegerField 表示的范围是 0-2147483647 Smallint unsigned PositiveSmallIntegerField 表示的范围是0-32767 bigint BigIntegerField 表示的范围是 -9223372036854775808-9223372036854775807 混合精度的小数型数字字段 DecimalField 有两个必需的参数: max_digits=ingt_number:限定数字的最大位数(包含小数位) decimal_places=int_number:存储数字的小数位 AutoField 根据已有id自增长的整形唯一字段,一般每个model类不需设置该字段,因为django会为每个model自动设置 Char CharField 需要指定最大宽度 max_length=xxx Text TextField 无最大宽度,如果有最大宽度,将在admin页面中的文本输入框中体现。 图像字段 ImageField 继承了FileField的所有属性和方法。而且还能自动验证上传的对象是否为合法的图像 Float FloatField 相当于Python中的float datetime DateTimeField 相当于Python中的datetime Date DateField 相当于Python中datetime.date boolean BooleanField 如果没有指定default,默认为None。如果需要能变成null,则应该使用NullBooleanField 可以空的boolean NullBooleanField 可以空的Boolean 邮箱 EmailField 默认max_length=254,validators可以检测格式,在form中使用 文件字段 FileField 这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100. 文件路径 FilePathField URL字段 URLField 默认max_length=200,有校验机制 UUID字段 UUIDField 一个char(32)的固定类型,使用时需要导入uuid库。 UUIDField(default=uuid.uuid4) -
字段方法参数
参数 作用 示例 null 默认为False,如果指定为True表示该字段可以为空,一般在Char和Text中不应该使用Null,而应该使用blank,null是纯粹是数据库的语法 read_count=IntegerField(null=True) blank 默认为False,如果指定为True,则在form表单验证的时候,可以为空。blank是django给表单验证的时候添加的 content=TextField(blank=True) default 提供一个默认值 content=TextField(default=’article’) editable 是否可以编辑,默认为True,若为False,则不会在admin/界面显示 id=UUIDField(editable=False) primary_key 指定是否是主键 id=UUIDField(primary_key=True) unique 指定是否唯一 stu_no = CharField(unique=True) choice 可选的,限制了该选项的字段值必须是所指定的choice中的一个 见下方示例 db_column 数据库column名称。默认为本字段的名称 db_index 如果为True的话,该字段的数据库索引将会被创建 DateField.auto_now 每次修改都会将当前时间更新进去,只有调用Model.save()方法才会调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及Time类才有的 update_time = DateField(auto_now=True) modify_time DateField.auto_now_add 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值 Create_time
-
一对一,一对多,多对对的关系
一对一(OneToOneField),一对多(外键,Foreignkey),多对多(ManyToManyField)
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
email = models.EmailField()
def __unicode__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
def __unicode__(self):
return self.title
mysql的设置
在app/settings.py 中:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'douban', #此处数据库名必须已存在mysql
'USER': 'root',
'PASSWORD': 'rootroot',
'HOST':'127.0.0.1',
'PORT':'3306',
}
}