Python 系列(20) django models

Posted on Posted in python

mydjango/settings.py

  1. """ 
  2. Django settings for mydjango project. 
  3.  
  4. Generated by 'django-admin startproject' using Django 1.10.5. 
  5.  
  6. For more information on this file, see 
  7. https://docs.djangoproject.com/en/1.10/topics/settings/ 
  8.  
  9. For the full list of settings and their values, see 
  10. https://docs.djangoproject.com/en/1.10/ref/settings/ 
  11. """  
  12.   
  13. import os  
  14.   
  15. # Build paths inside the project like this: os.path.join(BASE_DIR, ...)  
  16. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 目录路径  
  17.   
  18.   
  19. # Quick-start development settings - unsuitable for production  
  20. # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/  
  21.   
  22. # SECURITY WARNING: keep the secret key used in production secret!  
  23. SECRET_KEY = 'f4a_wo8-9-ibc63plbh^(2c!h3*+qi+et3xy09#j=xv3&^w3n-'  
  24.   
  25. # SECURITY WARNING: don't run with debug turned on in production!  
  26. DEBUG = True    # 调试模式  
  27.   
  28. ALLOWED_HOSTS = ["*"]   # 访问限制  
  29.   
  30.   
  31. # Application definition  
  32.   
  33. INSTALLED_APPS = [  
  34.     'django.contrib.admin',  
  35.     'django.contrib.auth',  
  36.     'django.contrib.contenttypes',  
  37.     'django.contrib.sessions',  
  38.     'django.contrib.messages',  
  39.     'django.contrib.staticfiles',  
  40.     'app01',    # 添加上自己创建的app  
  41. ]  
  42.   
  43. MIDDLEWARE = [ # 中间件  
  44.     'django.middleware.security.SecurityMiddleware',  
  45.     'django.contrib.sessions.middleware.SessionMiddleware',  
  46.     'django.middleware.common.CommonMiddleware',  
  47.     'django.middleware.csrf.CsrfViewMiddleware',  
  48.     'django.contrib.auth.middleware.AuthenticationMiddleware',  
  49.     'django.contrib.messages.middleware.MessageMiddleware',  
  50.     'django.middleware.clickjacking.XFrameOptionsMiddleware',  
  51. ]  
  52.   
  53. ROOT_URLCONF = 'mydjango.urls'  # 全局路由的设置  
  54.   
  55. TEMPLATES = [  
  56.     {  
  57.         'BACKEND': 'django.template.backends.django.DjangoTemplates',  
  58.         'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 模版目录  
  59.         'APP_DIRS': True,  
  60.         'OPTIONS': {  
  61.             'context_processors': [  
  62.                 'django.template.context_processors.debug',  
  63.                 'django.template.context_processors.request',  
  64.                 'django.contrib.auth.context_processors.auth',  
  65.                 'django.contrib.messages.context_processors.messages',  
  66.             ],  
  67.         },  
  68.     },  
  69. ]  
  70.   
  71. WSGI_APPLICATION = 'mydjango.wsgi.application' # 启动的服务 &n
    bsp;
  72.   
  73.   
  74. # Database  
  75. # https://docs.djangoproject.com/en/1.10/ref/settings/#databases  
  76.   
  77. DATABASES = {  
  78.     'default': {  
  79.         'ENGINE': 'django.db.backends.sqlite3', # 默认的数据库  
  80.         # 'ENGINE': 'django.db.backends.mysql',  
  81.         # 'ENGINE': 'django.db.backends.oracle',  
  82.         # 'ENGINE': 'django.db.backends.postgresql',  
  83.         # 'ENGINE': 'django.db.backends.postgresql_psycopg2',  
  84.         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),  
  85.     }  
  86. }  
  87.   
  88.   
  89. # Password validation  
  90. # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators  
  91.   
  92. AUTH_PASSWORD_VALIDATORS = [  
  93.     {  
  94.         'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',  
  95.     },  
  96.     {  
  97.         'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',  
  98.     },  
  99.     {  
  100.         'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',  
  101.     },  
  102.     {  
  103.         'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',  
  104.     },  
  105. ]  
  106.   
  107.   
  108. # Internationalization  
  109. # https://docs.djangoproject.com/en/1.10/topics/i18n/  
  110.   
  111. LANGUAGE_CODE = 'en-us' # 设置后台管理语言  
  112.   
  113. TIME_ZONE = 'Asia/Shanghai' # 时区  
  114.   
  115. USE_I18N = True  
  116.   
  117. USE_L10N = True  
  118.   
  119. USE_TZ = True  
  120.   
  121.   
  122. # Static files (CSS, JavaScript, Images)  
  123. # https://docs.djangoproject.com/en/1.10/howto/static-files/  
  124.   
  125. STATIC_URL = '/static/' # 静态文件,图片,js, css  
  126.   
  127. STATICFILES_DIRS =( # 这是自己添加的  
  128.         os.path.join(BASE_DIR,'static'),  
  129. )  

在模版里添加以下代码,就会找对应目录的图片

  1. {% load static %}  
  2. <img src="{% static 'images/1.jpg'%}">  

mydjango/settings.py

  1. DATABASES = {  
  2.     'default': {  
  3.         'ENGINE': 'django.db.backends.mysql',  
  4.         'NAME': 'lhh_test', # mysql 数据库中对应的库名  
  5.         'HOST': '127.0.0.1',  
  6.         'USER': 'root',  
  7.         'PASSWORD': 'mysqlpassword',  
  8.         'PORT': '3306',  
  9.     }  
  10. }  

python3的设置 mydjango/init.py

  1. import pymysql  
  2. pymysql.install_as_MySQLdb()  

执行命令

  1. python manage.py makemigrations # 通过orm,执行models.py中的代码  
  2. python manage.py migrate # 在mysql中创建一些django自带的表  
  3.   
  4. mysql> show tables;  
  5. +----------------------------+  
  6. | Tables_in_lhh_test         |  
  7. +----------------------------+  
  8. | auth_group                 |  
  9. | auth_group_permissions     |  
  10. | auth_permission            |  
  11. | auth_user                  |  
  12. | auth_user_groups           |  
  13. | auth_user_user_permissions |  
  14. | django_admin_log           |  
  15. | django_content_type        |  
  16. | django_migrations          |  
  17. | django_session             |  
  18. +----------------------------+  
  19. 10 rows in set (0.00 sec)  

app01/models.py

  1. # encoding=utf8  
  2. from __future__ import unicode_literals  
  3.   
  4. from django.db import models  
  5.   
  6. # Create your models here.  
  7. class Author(models.Model): # Author 为表名  
  8.     name = models.CharField(max_length=64,verbose_name='作者') # verbose_name 为django后台管理时看到的内容  
  9.     email = models.EmailField(verbose_name='邮箱')  
  10.       
  11.     def __str__(self): # 1.8.2 用 __unicode__  
  12.         return self.name # 让django后台显示添加的作者名,不然显示的就全是object author了  
  13.   
  14. class Publisher(models.Model):  
  15.     name = models.CharField(max_length=64,verbose_name='出版社')  
  16.     city = models.CharField(max_length=64,verbose_name='城市')  
  17.     country = models.CharField(max_length=64, verbose_name='国家')  
  18.     website = models.URLField(verbose_name='网址')  
  19.   
  20.     def __str__(self): # 1.8.2 用 __unicode__  
  21.         return '%s, %s' % (self.name, self.website) # 让django后台显示添加的作者名,不然显示的就全是object author了  
  22.         # 有时候这样也不好使,会出现编码问题,需要重新加载编码  
  23.         # import sys  
  24.         # reload(sys)  
  25.         # sys.setdefaultencoding('utf8')  
  26.   
  27. class Book(models.Model):  
  28.     name = models.CharField(max_length=128, verbose_name='书名')  
  29.     author = models.ManyToManyField('Author',verbose_name='作者') # 多对多的关系,关联到Author  
  30.     publisher = models.ForeignKey('Publisher', verbose_name='出版社')  
  31.     publisher_date = models.DateField(verbose_name = '出版时间') # models.DateTimeField 精确到秒,models.DateField 精确到天  
  32.   
  33.     def __str__(self): # 1.8.2 用 __unicode__  
  34.         return self.name # 让django后台显示添加的作者名,不然显示的就全是object author了  

执行命令生成

  1. $ python manage.py makemigrations # app01/migrations/0001_initial.py 生成这个文件  
  2. Migrations for 'app01':  
  3.   app01/migrations/0001_initial.py:  
  4.     - Create model Author  
  5.     - Create model Book  
  6.     - Create model Publisher  
  7.     - Add field publisher to book  
  8. $ python manage.py migrate  
  9. Operations to perform:  
  10.   Apply all migrations: admin, app01, auth, contenttypes, sessions  
  11. Running migrations:  
  12.   Applying app01.0001_initial... OK  

创建超级用户

  1. $ python manage.py createsuperuser  
  2. Username (leave blank to use 'roro'): roro    
  3. Email address: # 可以不填  
  4. Password: # 密码要有一定的复杂度  
  5. Password (again):   
  6. Superuser created successfully.  
  7. # http://192.168.1.250:8000/admin 进入后是看不到刚建的表的,必须进行下一步app01/admin.py注册一下  

app01/admin.py 设置完后,就可以在后台增删改查数据了

  1. from django.contrib import admin  
  2. from . import models  
  3.   
  4. # Register your models here.  
  5. admin.site.register(models.Author)  
  6. admin.site.register(models.Publisher)  
  7. admin.site.register(models.Book)  

代码操作数据

  1. $ python manage.py shell  
  2. # 添加数据  
  3. # 第一种方法  
  4. >>> from app01 import models  
  5. >>> a1 = models.Author(name='name100', email='name100@qq.com')  
  6. >>> a1.save()  
  7. # 第二种方法  
  8. >>> a1 = models.Author.objects.create(name='name101',email='name101@qq.com')  
  9. # 第三种方法  
  10. >>> a1 = models.Author.objects.create(**{'name':'name102','email':'name102@qq.com'})  
  11.   
  12. # 查找数据  
  13. >>> a1 = models.Author.objects.get(name='name102')  
  14. >>> a1.name  
  15. u'name102'  
  16. >>> a1.email  
  17. u'name102@qq.com'  
  18. >>> a1 = models.Author.objects.all() # 取所有数据  
  19. >>> a1 = models.Author.objects.all().count()  
  20. >>> a1  
  21. 6  
  22. # 查找所有email包含qq.com的行,过滤指定内容  
  23. >>> models.Author.objects.filter(email__contains='qq.com')  
  24. >>> a1 = models.Author.objects.filter(email__contains='qq.com') # 这是个列表  
  25. >>> a1[0].email  
  26. u'name001@qq.com'  
  27. # 忽略大小写  
  28. >>> models.Author.objects.filter(email__icontains='qq.com')  
  29. # 第一条和最后一条数据  
  30. >>> a1 = models.Author.objects.first()  
  31. >>> a1  
  32. <Author: name001>  
  33. >>> a1 = models.Author.objects.last()  
  34. >>> a1  
  35. <Author: name102-1>  
  36. # 取值  
  37. >>> a = models.Author.objects.filter(id__range=[1,4])  
  38. >>> a  
  39. <QuerySet [<Author: name001>, <Author: name002>, <Author: name003>, <Author: name100>]>  
  40. # id 小于 4 的  
  41. >>> a = models.Author.objects.filter(id__lt=4)  
  42. >>> a  
  43. <QuerySet [<Author: name001>, <Author: name002>, <Author: name003>]>  
  44. # id 大于 4 的  
  45. >>> a = models.Author.objects.filter(id__gt=4)  
  46. >>> a  
  47. <QuerySet [<Author: name101>]>  
  48. # id 大于等于 4 的  
  49. >>> a = models.Author.objects.filter(id__gte=4)  
  50. >>> a  
  51. <QuerySet [<Author: name101>]>  
  52.   
  53. # 排序  
  54. >>> a = models.Author.objects.order_by('id')  
  55. # 排倒序  
  56. >>> a = models.Author.objects.order_by('-id')  
  57.   
  58. # 修改  
  59. >>> a1.name = 'name102-1'  
  60. >>> a1.save()  
  61. >>> a1 = models.Author.objects.filter(email__contains='qq.com').update(email='126.com') #把带有qq.com的email,修改成126.com,不是替换  
  62.   
  63. # 删除  
  64. >>> a1 = models.Author.objects.filter(name='name102-1').delete() # 前面是过滤条件,后面调用delete()  
» 转载请注明来源:若我若鱼 » Python 系列(20) django models

One thought on “Python 系列(20) django models

  1. Google Chrome 39.0.2171.95 Google Chrome 39.0.2171.95 Windows 8.1 x64 Edition Windows 8.1 x64 Edition
    Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36

    Hello my loved one! I want to say that this
    article is amazing, great written and come with
    approximately all vital infos. I would like to peer more posts like this .

Leave a Reply

Your email address will not be published. Required fields are marked *

4 × three =