博客信息

Python Django 模型层(Field types,admin.py操作数据库)

发布时间:『 2019-08-08 08:24』  博客类别:Python  阅读(786)

Python Django官网:https://www.djangoproject.com/

 

1、创建一个Django项目

2、新增一个app应用

python manage.py startapp stu


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'stu'
]


3、更换mysql数据源配置信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'python',
        'HOST':'127.0.0.1',
        'PORT':'3306',
        'USER':'mybatis_ssm',
        'PASSWORD':'xiaoli'
    }
}


4、创建模型类post

class Post(models.Model):
    # 主键(不写的话Python会自动创建一个列名为id的数据库列名)
    pid = models.AutoField(primary_key=True)
    # 长度为30的唯一的字符串,admin中表单自带验证,该字段不能为空(blank=false),数据库值插入不能为空
    title = models.CharField(max_length=30,unique=True,blank=False,null=False)
    # 文本域
    content = models.TextField()
    # 点击量必须为正整数
    access_count = models.PositiveIntegerField()
    # 打赏为五位有效数字,小数点后最多两位
    price = models.DecimalField(max_digits=5,decimal_places=2)
    # 是否逻辑删除,默认false,也就是0
    isdelete = models.BooleanField()
    # 执行插入操作的时候默认在数据库中添加为当前时间   年月日
    created = models.DateField(auto_now_add=True)
    # 每次操作数据的时候都会将当前时间更新到数据库
    modified = models.DateTimeField(auto_now=True)
    # 上传图片到指定的目录下,在这里指的是"test3/upload/images"下
    img = models.ImageField(upload_to='upload/images')
    # 上传文件到指定的目录下,在这里指的是"test3/upload/files"下
    file = models.FileField(upload_to='upload/files')

    class Meta:
        # 这里一般不要手动去更改表名,默认生成的表名容易从代码中去找对应的实体类
        db_table='t_post'

    def __unicode__(self):
        return u'Post:%s'%self.title


5、更换数据源

 

pip install MySQL-python-1.2.5-cp27-none-win_amd64.whl


6、添加迁移文件

 

python manage.py makemigrations stu

 

出现下列错误:


小李飞刀_Python

解决方法:

pip install Pillow

 

然后再执行下

python manage.py makemigrations stu

 

注意:这样做数据库表是能够创建的,但是项目起不起来,控制台说是因为path问题,但是本人百度许久并未解决,如果有人解决这一问题,请联系QQ4929424758,拜谢!!!

在这里为了案例顺利进行,我们暂且先将下面字段注释;

 

img = models.ImageField(upload_to='upload/images')

 

 

7、执行迁移文件

python manage.py migrate

 

8、将生成的数据库表的实体类交给admin进行管理

编辑admin.py(stu/admin.py)


from django.contrib import admin
from .models import *

# Register your models here.
admin.site.register(Post)

 

9、创建admin管理后台的超级用户

python manage.py createsuperuser


小李飞刀_Python


10、进入Django后台admin管理界面

 

浏览器输入:

http://127.0.0.1:8000/admin


小李飞刀_Python



小李飞刀_Python


小李飞刀_Python


这是正常数据提交的截图

小李飞刀_Python


并且我们可以看到,在工程中的指定文件夹下出现了指定的文件,代表上传成功

小李飞刀_


数据库中也存在了对应的数据


总结重点

#### 常用字段类型

* django所有的数据模型都继承自models.Model
* CharField  max_length   (输入框)
* TextField 没有长度限制的字符串  (文本域)
* DateField 日期
* DateTimeField 日期+时间
* BooleanField 真假
* NullBooleanField Null,真假,
* Integer 整数
* PositiveIntegerField 正整数
* DecimalField  max_digits(几位数) decimal_places(小数点后保留几位)
* ImageField  图片 依赖于 Pillow(处理图片) upload_to='upload'  指定文件上传到目录
* FileField(ImageField继承FileField)
* AutoField
* ForeignKey 1:n
* ManyToManyField n:n
* EmailField 邮箱
* UUIDField 重复的概率非常低基本可以忽略,全世界都不一样的标示,uuid的产生和服务器的环境有关(CPU,网关,) 唯一性的标示,用户模块,订单号
* 不同的字段在后台对应不同的html的组件

ImageField 依赖于Pillow组件(python库)


#### 常用属性
* unique 标示这个字段唯一
* default  默认的意思 ,(如果不写的话就使用默认的值) 
* null=True 允许字段为null,(允许数据库为null)数据库层面的
* blank=True 表单阶段的,admin后台的
* auto_now 针对时间的,自动调整当前,(当修改条目的时候,这个时间会自动更新),每次修改都会更新  (修改,保存的时候才会生效,)
* auto_now_add 针对时间的,只添加一次,(创建的时间)


 

### 重点理解属性 ###
* 表单层面的东西(js判断字段是否是"    "),不需要重写迁移数据库
* unique=True  可以任何字段
* default 数据库+表单层面(同时生效)
* auto_now_add 创建的时候会自动的添加时间(数据库),(后台表单层面找不到这个字段)
* auto_now 每次修改的时候自动更新,(数据库+表单层面)
* null=True 数据库层面,允许为Null,不是空字符串
* blank=True 表单层面的,后台选填(表单项元素可以为空,表单不会进行非空校验)

### uuid ###

			uuid.uuid4().get_hex()
### django迁移失败如何处理 ###
* 删除模块下(问题模块)的所有的迁移记录
* 删除数据库中django_migrations中问题模块的迁移记录

			DELETE FROM django_migrations WHERE app='模块名'
* 删除这个模块下已经产生的所有的表
* 重新生成迁移文件
* 重新迁移


#### 修改settings.py文件后台页面显示中文

`

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'


修改为:

LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'


over......


关键字:     Python       Django  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有