目录
model 模型 是映射数据库的表模型。通过操作model类及其实例对象,对数据库的表和记录进行相关操作。
用于自定义一些model设置
class somemodel(models.model): pass class meta: db_table = cust_tablename # 自定义的映射数据库的表名;一般用自动生成的。 abstract = false|true # 定义该model 类是不是一个抽象类。
from django.db import models class author(models.model): name = models.charfield(max_length=32) age = models.smallintegerfield() def __str__(self): return self.name
利用pymysql作为访问mysql数据源的驱动
import pymysql pymysql.install_as_mysqldb()
databases = { 'default': { 'engine': 'django.db.backends.mysql', 'name': 'proj01', 'user': 'zjq', 'password': '123456', 'host': '127.0.0.1', 'port': '3306', } } # 'default'是必须设置的
这样我的mysql数据源就配好了。
命令行执行:
model class 定义的field属性就是对应数据库表中的字段。model class中定义的属性所绑定的是一个匹配数据库字段类型的field class实例.
field实例类型决定了以下东西:
每种field 都有自己的特定的参数,参考官方文档
每种field也有共同相同的参数:
choices 是一个可迭代的由二元元组组成的数据类型(如list,tuple等),作为该字段限制的取值集合作用;二元元组中的第一个是数据库字段中存的值,第二个主要用于form表单中展示;相当于第一个字是value,第二个值是展示。使用了choices参数,字段对应的html widget将是select box,而不再是text input。通过model实例获取展示值使用get_fieldname_display()获取
primary_key 设置为主键;主键是只读的,如果修改只会去创建一个新的记录。
objects是model class 最重要的属性,它是一个manager,是查询操作的接口。
参见《django orm继承关系》,后面我会在我本地整理好后更新到博客。
参见《django model making queries》,后面我会在我本地整理好后更新到博客。
因为model涉及到文件的这两个字段,数据库中是不最好不存文件对象,只能存一个文件的相对路径(实质就是相对于settings.media_root的配置根路径). 该文件字段对象提供了丰富的api来获取文件对象,获取文件路径,获取文件相关信息等。这就是数据库model文件字段和文件管理的映射就依靠:media_root+media_url+models.filefield值 建立起映射,从而提供给api使用,这样就可以通过model的filefield对象访问到用户上传到的文件。
主要api有:
初始化filefield需要一个upload_to参数:
class mymodel(models.model): # file will be uploaded to media_root/uploads // media_root是配置文件设置的filesystem的绝对路径。 upload = models.filefield(upload_to='uploads/') # or... # file will be saved to media_root/uploads/2015/01/30 upload = models.filefield(upload_to='uploads/%y/%m/%d/') upload_to 参数也可以是一个可执行的,只要返回一个包含文件的路径;如果是可执行的对象,那么这个可执行就需要返回一个完整的文件名和路径,因为filefield将会用这个可执行对象返回的作为这个字段的值,这时候;这个给upload_to赋值一个路径字符串不同,后者会将字符串做为路径,将赋值的文件对象的名字和路径作为数据库中该字段对应的值。
还有一个filefield参数是storage 一个django的存储引擎对象,这个对象是handle存储和检索文件的引擎。
在获取到一个model对象后,给其filefield对象赋值文件路径字符串也可以。
前者是一个field类,后者是一个file类,是一个file文件对象。
当访问前者时,会得到一个后者实例。注意:在使用create_user方法创建model对象时,对应的filefield参数传入的是一个uploadedfile对象,但是从前者获的field获取值是,是得到的一个fieldfile对象。两个对象是相似但是不同的:相同的是都是文件对象,都是包裹了相同的文件stream,不同是的两者对外的api不同,两者获取的名字很可能是不同的,因为django会在创建model时,如果存在相同文件名,会修改新加如的文件名,避免文件冲突的。所以上传的文件名,存入django media_root目录后,文件名字可能是会被修改的。后者file对象还有了url路径,提供给外界访问用户上传文件资源的url。
现在清楚了,filefield牵扯到了 存储对象,文件对象,系统配置media_root,至于media_url是给反查url或者获取url api用的。
django系统给了一个serve view函数,来提供访问用户的上传文件和系统的静态文件的功能。这个函数需要两个参数,一个文件的path,和文件的path相对的root路径。
如对本文有疑问, 点击进行留言回复!!
利用Python实现串口通信--以Arduino UNO为例
网友评论