数据库配置

django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中

  • models.py相关相关参数配置
  1. from django.db import models
  2.  
  3. class userinfo(models.Model):
  4. name = models.CharField(max_length=30)
  5. email = models.EmailField()
  6. memo = models.TextField()

可用的字段:

  1. 1models.AutoField  自增列 = int(11)
  2.   如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True
  3. 2models.CharField  字符串字段
  4.   必须 max_length 参数
  5. 3models.BooleanField  布尔类型=tinyint(1)
  6.   不能为空,Blank=True
  7. 4models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  8.   继承CharField,所以必须 max_lenght 参数
  9. 5models.DateField  日期类型 date
  10.   对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
  11. 6models.DateTimeField  日期类型 datetime
  12.   DateField的参数
  13. 7models.Decimal  十进制小数类型 = decimal
  14.   必须指定整数位max_digits和小数位decimal_places
  15. 8models.EmailField  字符串类型(正则表达式邮箱) =varchar
  16.   对字符串进行正则表达式
  17. 9models.FloatField  浮点类型 = double
  18. 10models.IntegerField  整形
  19. 11models.BigIntegerField  长整形
  20.   integer_field_ranges = {
  21.     'SmallIntegerField': (-32768, 32767),
  22.     'IntegerField': (-2147483648, 2147483647),
  23.     'BigIntegerField': (-9223372036854775808, 9223372036854775807),
  24.     'PositiveSmallIntegerField': (0, 32767),
  25.     'PositiveIntegerField': (0, 2147483647),
  26.   }
  27. 12models.IPAddressField  字符串类型(ip4正则表达式)
  28. 13models.GenericIPAddressField  字符串类型(ip4ip6是可选的)
  29.   参数protocol可以是:bothipv4ipv6
  30.   验证时,会根据设置报错
  31. 14models.NullBooleanField  允许为空的布尔类型
  32. 15models.PositiveIntegerFiel  正Integer
  33. 16models.PositiveSmallIntegerField  正smallInteger
  34. 17models.SlugField  减号、下划线、字母、数字
  35. 18models.SmallIntegerField  数字
  36.   数据库中的字段有:tinyintsmallintintbigint
  37. 19models.TextField  字符串=longtext
  38. 20models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
  39. 21models.URLField  字符串,地址正则表达式
  40. 22models.BinaryField  二进制
  41. 23models.ImageField 图片
  42. 24models.FilePathField 文件

字段相关参数:

  1. 1null=True
  2.   数据库中字段是否可以为空
  3. 2blank=True
  4.   django Admin 中添加数据时是否可允许空值
  5. 3primary_key = False
  6.   主键,对AutoField设置主键后,就会代替原来的自增 id
  7. 4auto_now auto_now_add
  8.   auto_now 自动创建---无论添加或修改,都是当前操作的时间
  9.   auto_now_add 自动创建---永远是创建时的时间
  10. 5choices
  11. GENDER_CHOICE = (
  12. (u'M', u'Male'),
  13. (u'F', u'Female'),
  14. )
  15. gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
  16. 6max_length
  17. 7default  默认值
  18. 8verbose_name  Admin中字段的显示名称
  19. 9name|db_column  数据库中的字段名称
  20. 10unique=True  不允许重复
  21. 11db_index = True  数据库索引
  22. 12editable=True  在Admin里是否可编辑
  23. 13error_messages=None  错误提示
  24. 14auto_created=False  自动创建
  25. 15help_text  在Admin中提示帮助信息
  26. 16validators=[]
  27. 17upload-to
  • settings.py相关配置

数据库连接配置:

  1. DATABASES = {
  2. 'default': {
  3. #'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
  4. 'ENGINE': 'django.db.backends.sqlite3', #添加数据库引擎;选项['postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'].
  5. 'NAME': 'F:/TestPython/blog/blog/db/data.db', # 数据库文件的路径.
  6. # The following settings are not used with sqlite3:
  7. # 下面的配置不适用于sqlite3:
  8. 'USER': '', # 数据库登陆用户名
  9. 'PASSWORD': '', # 数据库登陆密码
  10. 'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. # 主机名
  11. 'PORT': '', # Set to empty string for default. # 端口号
  12. }
  13. }

注册app:
在settings里的INSTALLED_APPS里面加上你的app名字

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'app01',
  9. ]

生成数据库表

  1. python manage.py makemigrations
  2. # 生成一个数据库结构migrations里面一个表
  3. python manage.py migrate
  4. # 根据migrations里面的表来创建数据库

将app的数据库注册到admin

  1. app01下面的admin.py写入以下内容:
  1. from django.contrib import admin
  2.  
  3. # Register your models here.
  4. # 导入app01的数据库模块
  5. from app01 import models
  6.  
  7. # 注册咱们创建的类,通过他来访问
  8. admin.site.register(models.UserInfo)

数据库相关操作

增删改查

  1. # 插入数据:
  2. UserInfo.objects.create(name='rain',password='',email='rain@163.com')
  3.  
  4. # 删除数据:
  5. UserInfo.objects.filter(name='rain').delete()
  6.  
  7. # 修改数据:
  8. UserInfo.objects.filter(name='rain').update(name='Rain1')
  9.  
  10. # 查找数据:
  11. UserInfo.objects.filter(name='rain')
  12. UserInfo.objects.all()
  13. UserInfo.objects.all()[:10]
  14. # 切片操作,获取10个人,不支持负索引,切片可以节约内存
  15. UserInfo.objects.get(name='rain')
  16. #查找所有
  17. models.UserInfo.objects.all()
  18. #查找指定条件
  19. models.UserInfo.objects.filter(age=18)
  20. #查找第一个
  21. models.UserInfo.objects.filter(age=18).first()
  22. #查找所有并且显示出来
  23. user_list_obj = models.UserInfo.objects.all()
  24. for line in user_list_obj:
  25. print(line.username,line.age)

进阶操作

  • 利用双下划线将字段和对应的操作连接起来
  1. # 获取个数
  2.  
  3. models.Tb1.objects.filter(name='seven').count()
  4.  
  5. # 大于,小于
  6.  
  7. models.Tb1.objects.filter(id__gt=1) # 获取id大于1的值
  8. models.Tb1.objects.filter(id__lt=10) # 获取id小于10的值
  9. models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
  10.  
  11. # in
  12.  
  13. models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
  14. models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
  15.  
  16. # contains
  17.  
  18. models.Tb1.objects.filter(name__contains="ven")
  19. models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
  20. models.Tb1.objects.exclude(name__icontains="ven")
  21.  
  22. # range
  23.  
  24. models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and
  25.  
  26. # 其他类似
  27.  
  28. startswithistartswith, endswith, iendswith,
  29.  
  30. # order by
  31.  
  32. models.Tb1.objects.filter(name='seven').order_by('id') # asc
  33. models.Tb1.objects.filter(name='seven').order_by('-id') # desc
  34.  
  35. # limit 、offset
  36.  
  37. models.Tb1.objects.all()[10:20]
  38.  
  39. # group by
  40. from django.db.models import Count, Min, Max, Sum
  41. models.Tb1.objects.filter(c1=1).values('id').annotate(c=Count('num'))
  42. SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"
  • F和Q操作
  1. # F 使用查询条件的值
  2.  
  3. from django.db.models import F
  4. models.Tb1.objects.update(num=F('num')+1)
  5.  
  6. # Q 构建搜索条件
  7. from django.db.models import Q
  8. con = Q()
  9.  
  10. q1 = Q()
  11. q1.connector = 'OR'
  12. q1.children.append(('id', 1))
  13. q1.children.append(('id', 10))
  14. q1.children.append(('id', 9))
  15.  
  16. q2 = Q()
  17. q2.connector = 'OR'
  18. q2.children.append(('c1', 1))
  19. q2.children.append(('c1', 10))
  20. q2.children.append(('c1', 9))
  21.  
  22. con.add(q1, 'AND')
  23. con.add(q2, 'AND')
  24.  
  25. models.Tb1.objects.filter(con)
  26.  
  27. from django.db import connection
  28. cursor = connection.cursor()
  29. cursor.execute("""SELECT * from tb where name = %s""", ['Lennon'])
  30. row = cursor.fetchone()

连表操作

连表关系:

  • 一对多,models.ForeignKey(ColorDic)
  • 一对一,models.OneToOneField(OneModel)
  • 多对多,authors = models.ManyToManyField(Author)

应用场景:

  • 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)。 例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据。
  • 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)。 例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。
  • 多对多:在某表中创建一行数据是,有一个可以多选的下拉框。 例如:创建用户信息,需要为用户指定多个爱好。

一对多

  • 数据库表:models.py UserType存放用户类型,UserInfo存放用户信息
  1. from django.db import models
  2. # Create your models here.
  3.  
  4. class UserType(models.Model):
  5. caption = models.CharField(max_length=32)
  6. # 超级管理员,普通用户,游客,黑河
  7. def __str__(self):
  8. return self.caption
  9.  
  10. class UserInfo(models.Model):
  11. user = models.CharField(max_length=32)
  12. pwd = models.CharField(max_length=32)
  13. user_type = models.ForeignKey('UserType')
  • 创建有外键的数据
  1. #方法一:需要进行两次数据库操作,不推荐
  2. UserInfo.objects.create(user='test',pwd='',user_type=UserType.objects.get(id=1))
  3. #方法二:利用外键关系进行直接插入值,此时user_type代指的就是usertype表
  4. UserInfo.objects.create(user='test',pwd='',user_type_id=1)
  5.  
  6. >>> from app01 import models
  7. >>> models.UserInfo.objects.create(user='test',pwd='',user_type=models.UserType.objects.get(id=1))
  8. <UserInfo: UserInfo object>
  9. >>> models.UserInfo.objects.create(user='asdasdadas',pwd='',user_type_id=3)
  10. <UserInfo: UserInfo object>
  • 数据:

  • 查找

1.根据用户,查找用类型

  1. >>> models.UserInfo.objects.filter(user="test")[0].user_type.caption
  2. '管理员'
  3. 此时user_type对应的就是usertype的表,所以直接使用.caption就可以拿到数据

2.根据用户类型查找用户

  1. #方法一:先查找出用户类型对应的user_type的id,然后再去userinfo表中查找id对应的用户
  2. >>> role_id = models.UserType.objects.get(caption='管理员').id
  3. >>> role_id
  4. 1
  5. >>> models.UserInfo.objects.filter(user_type=role_id).values('user','pwd')
  6. <QuerySet [{'pwd': '', 'user': '张三'}, {'pwd': '', 'user': 'test2'}, {'pwd': '', 'user': 'test'}]>
  7.  
  8. #方法二:使用双下划线进行一次连表操作
  9. >>> models.UserInfo.objects.filter(user_type__caption="管理员")
  10. <QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
  11. >>> sql[0].user
  12. '张三'
  13. >>> sql[0].pwd
  14. ''
  15. >>> sql[0].user_type.caption
  16. '管理员'
  17. >>> sql[0].user_type.id
  18. 1
  19.  
  20. 继续封装,同时取用户的所有信息:
  21. >>> sql = models.UserInfo.objects.filter(user_type__caption="管理员").values('user','pwd','user_type__id','user_type__caption')
  22. >>> sql
  23. <QuerySet [{'user_type__id': 1, 'pwd': '', 'user': '张三', 'user_type__caption': '管理员'}, {'user_type__id': 1, 'pwd': '', 'user': 'test2', 'user_type__caption': '管理员'}, {'user_type__'pwd': '123', 'user': 'test', 'user_type__caption': '管理员'}]>
  24.  
  25. 打印sql语句:
  26. >>> print(sql.query)
  27. SELECT "app01_userinfo"."user", "app01_userinfo"."pwd", "app01_userinfo"."user_type_id", "app01_usertype"."caption" FROM "app01_userinfo" INNER JOIN "app01_usertype" ON ("app01_userinfo"."user_type_id" = "app01_usertype"."id") WHERE "app01_usertype"."caption" = 管理员

跨多张表进行操作,如果UserType表中还有外键指向另一张表的主键,怎么查呢?
新的表结构如下:

  1. from django.db import models
  2. # Create your models here.
  3.  
  4. class UserType(models.Model):
  5. caption = models.CharField(max_length=32) # 超级管理员,普通用户,游客,黑河
  6. s models.ForeignKey('something')
  7. def __str__(self):
  8. return self.caption
  9.  
  10. class UserInfo(models.Model):
  11. user = models.CharField(max_length=32)
  12. pwd = models.CharField(max_length=32)
  13. user_type = models.ForeignKey('UserType')
  14.  
  15. class something(models.Model):
  16. name = models.CharField(max_length=32)

查询:

  1. models.UserInfo.objects.filter(user_type__s__name="一些条件值"
  1. 这是跨两张表,跨三张表、四张表都这样

多对多

  • 表结构: 一个girl表、一个boy表,还一个boy_girl的关系表

  

  1. class Girl(models.Model):
  2. name = models.CharField(max_length=32)
  3. b = models.ManyToManyField('Boy')
  4.  
  5. class Boy(models.Model):
  6. name = models.CharField(max_length=32)

PS:多对多关系需要三张表,两张数据表,一张关系表,但是在django 中如果使用ManyToManyField的话,不需要在指定第三张表,默认django会创建。当然,如果不使用该字段的话,也可以手动指定第三张表,然后使用models.ForeignKey做外键关联

  • 添加数据

添加数据到关系表:

  1. 女孩跟男孩建立关系 正向操作
  2. >>> G = models.Girl.objects.get(id=1)
  3. >>> g = models.Girl.objects.get(id=1)
  4. >>> girl = models.Girl.objects.get(id=1)
  5. >>> boy = models.Boy.objects.get(id=3)
  6. >>> girl.name
  7. 'fuzj3'
  8. >>> boy.name
  9. 'fuzj2'
  10.  
  11. #使用对象建立关系
  12.  
  13. >>> girl.b.add(boy) #此时的b时多对多的字段
  14. >>> bs = models.Boy.objects.all() #获取男孩的所有对象,返回数组
  15. >>> g.b.add(*bs) #批量将关系插入到关系表
  16.  
  17. #使用主键值建立关系
  18. >>> girl = models.Girl.objects.get(id=3)
  19. >>> girl.b.add(3)
  20. >>> bs_list = [1,4,5]
  21. >>> girl.b.add(*bs_list)
  22.  
  23. 男孩跟女孩建立关系 反向操作
  24.  
  25. >>> boy = models.Boy.objects.get(id=1)
  26. >>> boy
  27. <Boy: Boy object>
  28. >>> boy.girl_set.add(3)

  • 删除

    remove() 删除
    clear() 清空

  1. >>> g1 = models.Girl.objects.get(id=1) #获取一个女孩对象
  2. >>> g1.b.remove(2) #单个删除一个关系
  3. >>> g1.b.remove(*[3,4]) #批量删除多个关系
  4. >>> g1.b.clear() #清空本对象对应的所有关系
  • 查询
    支持all() filer()等操作

    

  1. 1.通过女孩查找男孩(正向查找)
  2. >>> models.Girl.objects.filter(name='fuzj2').values('id','name','b__name')
  3. <QuerySet [{'name': 'fuzj2', 'id': 3, 'b__name': 'fuzj'}, {'name': 'fuzj2', 'id': 3, 'b__name': 'fuzj2'}, {'name': 'fuzj2', 'id': 3, 'b__name': 'fuzj3'}, {'name': 'fuzj2', 'id': 3, 'b__name': None}]>
  4.  
  5. 'b__name' b此时代指的关系表,所以b__name 就是跨到了boy表,。此时相当于直接跨了两张表
  6.     2. 通过男孩查找女孩(反向查找)
  7. >>> models.Boy.objects.filter(name='fuzj').values('id','name','girl__name')
  8. <QuerySet [{'name': 'fuzj', 'id': 1, 'girl__name': 'fuzj2'}]>
  9.  
  10. 'girl__name' 中,girlboy表中隐藏的字段,代指的是和girl的关系表,所以girl__name就跨到了girl

  • 修改

    默认django不支持修改操作,如果实现修改操作,只能是先删除,然后再创建,显然这个效率不是很高。所以,我们可以通过原生的sql语句进行操作

  1. from django.db import connection
  2. cursor = connection.cursor()
  3. cursor.execute("update tbname set girl_id = '3' where boy_id = %s",[3])

中间件

中间件定义:

  • 中间件是一个、一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件

  • 中间件可以对进来的请求和出去的请求进行控制

  • 中间件是一类。

由上图可知,中间件是位于wsgi和路由系统中间的环节。用户请求和和回应请求都会经过中间件。

看下面的代码在settings里中间件的类:

  1. MIDDLEWARE_CLASSES = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. 'django.middleware.csrf.CsrfViewMiddleware',
  6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  7. 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  8. 'django.contrib.messages.middleware.MessageMiddleware',
  9. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  10. ]

当有请求过来的时候,默认从上倒下执行!然后在返回的时候从下面在返回回去

自定义中间件

中间件中可以定义四个方法,分别是:

  • process_request(self,request)
  • process_view(self, request, callback, callback_args, callback_kwargs)
  • process_exception(self, request, exception) 这个方法只有在出现错误的时候才会触发
  • process_response(self, request, response)
  • process_template_response(self,request,response) 这个方法只有在返回对象中有render方法的时候才执行,如render_to_response('/index/')

以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。

  • 创建中间件脚本

在django的的project目录下创建一个middleware目录,并创建一个md.py的脚本,内容如下:

  1. class Testmiddle:
  2. def process_request(self,request):
  3. print 'Testmiddle process_request'
  4. def process_view(self, request, callback, callback_args, callback_kwargs):
  5. print 'Testmiddle process_view'
  6. def process_exception(self, request, exception):
  7. pass
  8. def process_response(self, request, response):
  9. print 'Testmiddle process_response'
  10. return response
  11.  
  12. class Nextmiddle:
  13. def process_request(self,request):
  14. print 'Nextmiddle process_request'
  15. def process_view(self, request, callback, callback_args, callback_kwargs):
  16. print 'Nextmiddle process_view'
  17. def process_exception(self, request, exception):
  18. pass
  19. def process_response(self, request, response):
  20. print 'Nextmiddle process_response'
  21. return response
  • 注册中间件

修改settings.py文件,在MIDDLEWARE_CLASSES中添加我们创建的中间件

  1. MIDDLEWARE_CLASSES = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. 'django.middleware.csrf.CsrfViewMiddleware',
  6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  7. 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  8. 'django.contrib.messages.middleware.MessageMiddleware',
  9. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  10. 'middleware.middle.Testmiddle',
  11. 'middleware.middle.Nextmiddle',
  12. ]
  • 设置url 略
  • 测试:
  1. Testmiddle process_request
  2. Nextmiddle process_request
  3. Testmiddle process_view
  4. Nextmiddle process_view
  5. This app01 Views.index
  6. Nextmiddle process_response
  7. Testmiddle process_response

从输出结果可以看出:

他是先执行Testmiddle 的request 方法又执行了Nextmiddle的 process_request方法, 然后在执行Testmiddle的view方法,Nextmiddle的view方法

注意:django版本1.10以后,会报如下错误:

解决如下:

  1. from django.utils.deprecation import MiddlewareMixin
  2. class Testmiddle(MiddlewareMixin):
  3. def process_request(self,request):
  4. print 'Testmiddle process_request'
  5. def process_view(self, request, callback, callback_args, callback_kwargs):
  6. print 'Testmiddle process_view'
  7. def process_exception(self, request, exception):
  8. pass
  9. def process_response(self, request, response):
  10. print 'Testmiddle process_response'
  11. return response
  12.  
  13. class Nextmiddle(MiddlewareMixin):
  14. def process_request(self,request):
  15. print 'Nextmiddle process_request'
  16. def process_view(self, request, callback, callback_args, callback_kwargs):
  17. print 'Nextmiddle process_view'
  18. def process_exception(self, request, exception):
  19. pass
  20. def process_response(self, request, response):
  21. print 'Nextmiddle process_response'
  22. return response

注意:
* 老版本中在中间件中如果某个中间件类的方法返回的不是none,则后面的中间件不会再处理请求,也不会到达路由系统,而是直接到第一个process_response,开始所有的process_response处理
* 新版本中在中间件中如果某个中间件类的方法返回的不是none,则后面的中间件不会再处理请求,也不会到达路由系统,而是直接到最后一个process_response处理,然后返回给客户端

django数据库操作和中间件的更多相关文章

  1. 从命令行运行django数据库操作

    从命令行运行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_T ...

  2. Django数据库操作(增删改查)

    Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...

  3. Django 数据库操作

    Django 数据库操作 Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个 ...

  4. Django数据库操作

    刚学到Django的数据库操作,把它记录下来,方便以后查看: 在Django中定义数据库表,并使用Django提供的方法来对数据库进行操作(增.删.改.查) 1.定义3个数据库表: class Gro ...

  5. 11.Django数据库操作(查)

    django.db.models.query.QuerySet1.可迭代2.可切片 官方文档:https://docs.djangoproject.com/en/1.9/ref/models/quer ...

  6. django 数据库操作详解

    Django配置使用mysql数据库 修改 settings.py 中的 DATABASES  注意:django框架不会自动帮我们生成mysql数据库,所以我们需要自己去创建. DATABASES ...

  7. Python Django 数据库操作

    1. 建立app 在自己的工程项目目录下输入: python manage.py startapp myapp(你想建立的app名称) 建立一个叫myapp的app 这样,在你的工程项目目录下会出现一 ...

  8. Django 数据库操作进阶F和Q操作

    Model中的F F 的操作通常的应用场景在于:公司对于每个员工,都涨500的工资.这个时候F就可以作为查询条件 1 2 3 from django.db.models import F models ...

  9. Python菜鸟之路:Django 数据库操作进阶F和Q操作

    Model中的F F 的操作通常的应用场景在于:公司对于每个员工,都涨500的工资.这个时候F就可以作为查询条件 from django.db.models import F models.UserI ...

随机推荐

  1. minSdkVersion maxSdkVersion targetSdkVersion target 的区别

    minSdkVersion 描述:app最低支持的sdk版本号 作用:如果手机SdkVersion小于app中定义的minSdkVersion,则android系统不允许安装该app 定义位置:And ...

  2. Android开发案例 - 图库

    本文不涉及UI方面的内容, 如果您是希望了解UI方面的访客, 请跳过此文. 本文将要详细介绍如何实现流畅加载本地图库. 像平时用得比较多应用, 如微信(见下图), 微博等应用, 都实现了图库功能, 其 ...

  3. C#设计模式:原型模式(Prototype)及深拷贝、浅拷贝

    原型模式(Prototype) 定义: 原型模式:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象.被复制的实例被称为原型,这个原型是可定制的. Prototype Pattern也是一 ...

  4. 记录一次Quartz2D学习(六)

    (五)内主要讲到了一些图层操作 本次主要讲 图片的裁剪 6图片裁剪 6.1 图片裁剪 TIP: 可能会影响统一图层的显示 - (void)drawRect:(CGRect)rect { CGConte ...

  5. Java使用POS打印机(无驱)

    使用原因:应项目要求,需要使用打印机,但是如果使用Windows驱动来实现打印,在某些条件下会发生网络堵塞等,而且没有提示,所以为了确保信息的完整,避免数据丢失.我们使用无驱打印(直接写端口的方法), ...

  6. EasyUI combobox

    高度自适应 data-options="required:true,editable:false,panelHeight:'auto',panelMaxHeight:170" 加上 ...

  7. Java并发之原子变量和原子引用与volatile

    我们知道在并发编程中,多个线程共享某个变量或者对象时,必须要进行同步.同步的包含两层作用:1)互斥访问(原子性):2)可见性:也就是多个线程对共享的变量互斥地访问,同时线程对共享变量的修改必须对其他线 ...

  8. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

  9. BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]

    1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1318  Solved: 498[Submit][ ...

  10. CentOS 7.0系统安装配置步骤详解

    CentOS 7.0系统是一个很新的版本哦,很多朋友都不知道CentOS 7.0系统是怎么去安装配置的哦,因为centos7.0与以前版本是有很大的改进哦. 说明: 截止目前CentOS 7.x最新版 ...