第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

时间:2021-09-01 19:49:50

Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

数据库配置

django默认支持sqlite,mysql, oracle,postgresql数据库。

1,django默认使用sqlite的数据库,默认自带sqlite的数据库驱动

   引擎名称:django.db.backends.sqlite3

  在全局配置文件settings.py可以看到确认配置使用sqlite数据库

# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# 默认配置使用的sqlite数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', #配置数据库引擎名称
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #生成数据库到当前的项目文件夹里
}
}

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

所以我们首次运行程序时会在目录生成db.sqlite3数据库

2,MySQL数据库【重点】

mysql驱动程序

          MySQLdb(mysql python)

          mysqlclient

          MySQL

          PyMySQL(纯python的mysql驱动程序)

在django的项目中会默认使用sqlite数据库,如果要使用MySQL数据库需要重新配置MySQL数据库信息,将sqlite数据库注释掉

settings.py配置MySQL数据库信息

#MySQL数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #配置数据库引擎名称
'NAME': 'jxiou', #数据库名称
'USER': 'root', #数据库用户名
'PASSWORD': '', #数据库密码
'HOST': '127.0.0.1', #数据库链接地址
'PORT': '', #数据库端口
}
}

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

注意:NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建

USER和PASSWORD分别是数据库的用户名和密码。

设置完后,再启动我们的Django项目前,需要激活我们的mysql。

然后,启动项目,会报错:no module named MySQLdb

这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL

所以,我们只需要找到项目里的全局配置里的__init__,py配置数据库驱动

在里面写入:

import pymysql

pymysql.install_as_MySQLdb()

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

此时django框架连接MySQL数据库配置好了

给PyCharm安装MySQL数据库管理插件

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

配置数据库信息

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

下载数据库管理插件

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

django创建数据库表

在操作数据库表之前,首先检查一下全局配置文件settings.py里的数据库表操作配置里是否配置了应用路径,如果没有需要加入应用路径

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

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

配置好了我们开始创建表

对数据库表的操作都是由django下db模块的models对象来操作的,所以需要导入这个对象

注意:一张表对应一个类

首先要创建一个类来操作一张表,而这个类必须继承models.Model对象

注意创建表之前,必须要先创建好数据库

from __future__ import unicode_literals

from django.db import models        #导入models对象

class userinfo(models.Model):       #创建类必须继承models.Model,类名将是在数据库里的表名称
#不设置主键id将自动创建
anem = models.CharField("用户名",max_length=50) #设置一个anem名称的字符串字段,最大长度50位,在django后台显示名称为:用户名
address = models.CharField("地址", max_length=50)
city = models.CharField('城市', max_length=60)
country = models.CharField(max_length=50) class Meta:
verbose_name = '用户表' #设置表名称在django后台显示的中文名称
verbose_name_plural = verbose_name def __str__(self): #设置在django后台显示字段名称
return self.anem

设置好操作表的类后,我们需要生成表,生成表需要在PyCharm的终端输入命令,先输入 makemigrations  然后在输入   migrate   来生成表

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

此时表就生成了

注意:我们已经生成了需要的表,也包含我们自定义的userinfo表,此时数据库里的django_migrations表记录了,我们生成表时的信息,

如果我们将我们的userinfo表,删除后,在执行命令重建我们的userinfo表,将无法生成,因为django_migrations表记录了你已经生成了

解决方法:

现将项目里migrations目录下的缓存删除

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

在重新执行命令,makemigrations  然后在输入   migrate   来生成表,会提示你已经生成了这个表

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

我们打开django_migrations表里找到,与现在migrations目录下缓存名称相同的记录

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

我们把django_migrations表里的这条记录,删除后,就可以再次生成了

重点:注意只删除django_migrations表里,与现在migrations目录下缓存名称相同的记录,否则将出问题

配置django的admin数据库管理后台

首先配置数据库后台路由映射

from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'admin/', admin.site.urls), #路由映射admin数据库管理
url(r'articles/', views.special) #路由映射第三个参数,额外传参,字典方式,逻辑处理函数以参数方式接收字典键
]

然后在PyCharm终端输入命令 Python manage.py createsuperuser

1、设置用户名

2、设置邮箱

3、设置密码,8位以上,不能纯数字

4、确认密码

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

然后用刚才设置的用户名和密码登录

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

只能看到刚才创建的用户登录数据,数据库数据需要在项目的admin.py里注册才能看到

admin.site.register(参数是数据库操作表的类),注册数据库到admin数据库管理,参数是models.py里操作数据库表的类

from django.contrib import admin
from app1.models import * admin.site.register(userinfo) #注册数据库到admin数据库管理,参数是models.py里操作数据库表的类

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

此时,可以看到admin管理页面已经出现了我们刚才创建的,用户表,显示的是中文,而且字段,也是中文,因为我们在用户表类里设置了admin显示中文的名称

from __future__ import unicode_literals

from django.db import models        #导入models对象

class userinfo(models.Model):       #创建类必须继承models.Model,类名将是在数据库里的表名称
#不设置主键id将自动创建
anem = models.CharField("用户名",max_length=50) #设置一个anem名称的字符串字段,最大长度50位,在django后台显示名称为:用户名
address = models.CharField("地址", max_length=50)
city = models.CharField('城市', max_length=60)
country = models.CharField(max_length=50) class Meta:
verbose_name = '用户表' #设置表名称在django后台显示的中文名称
verbose_name_plural = verbose_name def __str__(self): #设置在django后台显示字段名称
return self.anem

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

我们创建一条数据看看

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

此时我们看到只显示了一个字段

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

此时,我们需要配置admin显示所有字段

方法:找到项目应用里的admin.py文件,在注册表到admin哪里添加一个类,类继承admin.ModelAdmin类

配置好相应字段后,将类同表一起注册到admin

from django.contrib import admin
from app1.models import * #配置userinfo表在admin的显示信息
class userinfoAdmin(admin.ModelAdmin):
# 配置显示字段,
list_display = ('anem', 'address','city','country')
# 配置查询字段
search_fields = ('anem','city')
# 配置排序字段
ordering = ('-id',)
# 配置右边是否有过滤条件字段
list_filter = ('address',)
admin.site.register(userinfo,userinfoAdmin) #注册数据库到admin数据库管理,参数是models.py里操作数据库表的类

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

 

下面介绍表的数据类型,以及参数

from __future__ import unicode_literals

from django.db import models        #导入models对象

class userinfo(models.Model):       #创建类必须继承models.Model,类名将是在数据库里的表名称
#不设置主键id将自动创建
anem = models.CharField("用户名",max_length=50) #设置一个anem名称的字符串字段,最大长度50位,在django后台显示名称为:用户名
address = models.CharField("地址", max_length=50)
city = models.CharField('城市', max_length=60)
country = models.CharField('性别',max_length=50) class Meta:
verbose_name = '用户表' #设置表名称在django后台显示的中文名称
verbose_name_plural = verbose_name def __str__(self): #设置在django后台显示字段名称
return self.anem

上面我们只用到了CharField(),也就是varchar字符串类型,参数也只用到max_length=50,最大长度50位

models对象的数据类型

AutoField(Field)
- int自增列,必须填入参数 primary_key=True BigAutoField(AutoField)
- bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列
from django.db import models class UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=32) class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32) SmallIntegerField(IntegerField):
- 小整数 -32768 ~ 32767 PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 0 ~ 32767
IntegerField(Field)
- 整数列(有符号的) -2147483648 ~ 2147483647 PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正整数 0 ~ 2147483647 BigIntegerField(IntegerField):
- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 自定义无符号整数字段 class UnsignedIntegerField(models.IntegerField):
def db_type(self, connection):
return 'integer UNSIGNED' PS: 返回值为字段在数据库中的属性,Django字段默认的值为:
'AutoField': 'integer AUTO_INCREMENT',
'BigAutoField': 'bigint AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime',
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'DurationField': 'bigint',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time',
'UUIDField': 'char(32)', BooleanField(Field)
- 布尔值类型 NullBooleanField(Field):
- 可以为空的布尔值 CharField(Field)
- 字符类型
- 必须提供max_length参数, max_length表示字符长度 TextField(Field)
- 文本类型 EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制 IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both" URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号) CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字 UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件
allow_folders=False, 允许文件夹 FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串) DateTimeField(DateField)
- 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] DateField(DateTimeCheckMixin, Field)
- 日期格式 YYYY-MM-DD TimeField(DateTimeCheckMixin, Field)
- 时间格式 HH:MM[:ss[.uuuuuu]] DurationField(Field)
- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 FloatField(Field)
- 浮点型 DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度 BinaryField(Field)
- 二进制类型

数据类型参数

   null                数据库中字段是否可以为空
db_column 数据库中字段的列名
db_tablespace
default 数据库中字段的默认值
primary_key 数据库中字段是否为主键

   auto_now 和 auto_now_add
    auto_now 会自动创建时间字段,无论添加或者修改,都是系统当前时间
    auto_now_add 会自动创建时间字段,永远是创建时的时间

    db_index            数据库中字段是否可以建立索引
unique 数据库中字段是否可以建立唯一索引
unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引
unique_for_month 数据库中字段【月】部分是否可以建立唯一索引
unique_for_year 数据库中字段【年】部分是否可以建立唯一索引 verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1) error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息;
字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{'null': "不能为空.", 'invalid': '格式错误'} validators 自定义错误验证(列表类型),从而定制想要的验证规则
from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\
MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
如:
test = models.CharField(
max_length=32,
error_messages={
'c1': '优先错信息1',
'c2': '优先错信息2',
'c3': '优先错信息3',
},
validators=[
RegexValidator(regex='root_\d+', message='错误了', code='c1'),
RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),
EmailValidator(message='又错误了', code='c3'), ]
)

创建表索引

普通索引,和联合普通索引

from __future__ import unicode_literals

from django.db import models        #导入models对象

class yhubiao(models.Model):
id = models.AutoField('id',primary_key=True)
anem = models.CharField("用户名",max_length=50)
mim = models.CharField("地址", max_length=50)
country = models.CharField('性别',max_length=50) class Meta:
# 联合索引
index_together = [
("anem", "mim"), #一个字段是普通索引,两个字段是联合普通索引
] verbose_name = '用户表'
verbose_name_plural = verbose_name def __str__(self):
return self.anem

唯一索引和联合唯一索引

from __future__ import unicode_literals

from django.db import models        #导入models对象

class yhubiao(models.Model):
id = models.AutoField('id',primary_key=True)
anem = models.CharField("用户名",max_length=50)
mim = models.CharField("地址", max_length=50)
country = models.CharField('性别',max_length=50) class Meta:
# 联合唯一索引
unique_together = (("mim", "anem"),) #一个字段是唯一索引,两个字段是联合唯一索引 verbose_name = '用户表'
verbose_name_plural = verbose_name def __str__(self):
return self.anem

触发验证

1.触发Model中的验证和错误提示有两种方式:
a. Django Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息
b. 调用Model对象的 clean_fields 方法,如:
# models.py
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32) email = models.EmailField(error_messages={'invalid': '格式错了.'}) # views.py
def index(request):
obj = models.UserInfo(username='', email='uu')
try:
print(obj.clean_fields())
except Exception as e:
print(e)
return HttpResponse('ok') # Model的clean方法是一个钩子,可用于定制操作,如:上述的异常处理。 2.Admin中修改错误提示
# admin.py
from django.contrib import admin
from model_club import models
from django import forms class UserInfoForm(forms.ModelForm):
username = forms.CharField(error_messages={'required': '用户名不能为空.'})
email = forms.EmailField(error_messages={'invalid': '邮箱格式错误.'})
age = forms.IntegerField(initial=1, error_messages={'required': '请输入数值.', 'invalid': '年龄必须为数值.'}) class Meta:
model = models.UserInfo
# fields = ('username',)
fields = "__all__" class UserInfoAdmin(admin.ModelAdmin):
form = UserInfoForm admin.site.register(models.UserInfo, UserInfoAdmin)

 补充Django目录说明以及全局配置文件

Django目录说明

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

全局配置文件配置

"""
Django settings for Xiangmu project. Generated by 'django-admin startproject' using Django 1.10. For more information on this file, see
https://docs.djangoproject.com/en/1.10/topics/settings/ For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.10/ref/settings/
""" import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '!eco91o+^k9q#^j79@oymxltu-%osux)dpet_qv9kp88e)2o*7' # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True ALLOWED_HOSTS = [] # Application definition
# 注册APP,也就是注册应用项目,只有注册了的应用才能操作数据库
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1',
] MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ROOT_URLCONF = 'Xiangmu.urls' #配置模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')] #配置模板文件路径,也就是html路径
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
] WSGI_APPLICATION = 'Xiangmu.wsgi.application' # Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# 默认配置使用的sqlite数据库
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3', #配置数据库引擎名称
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #生成数据库到当前的项目文件夹里
# }
# } #MySQL数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #配置数据库引擎名称
'NAME': 'jxiou', #数据库名称
'USER': 'root', #数据库用户名
'PASSWORD': '', #数据库密码
'HOST': '127.0.0.1', #数据库链接地址
'PORT': '', #数据库端口
}
} # Password validation
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
] # Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/ #配置静态文件前缀
STATIC_URL = '/static/'
#配置静态文件目录
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static')
)
														
		

第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置的更多相关文章

  1. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  2. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  3. 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...

  4. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  5. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  6. 六 Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.ForeignKey()外键字段一对多,值是要外键的表类 from __future__ import unico ...

  7. 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...

  8. 第四百零六节,自定义用户表类来继承Django的用户表类,

    第四百零六节,自定义用户表类来继承Django的用户表类, models.py from django.db import models # Create your models here. from ...

  9. 第三百九十六节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,自定义列表页上传插件

    第三百九十六节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,自定义列表页上传插件 设置后台列表页面字段统计 在当前APP里的adminx.py文件里的数据表管理器里设置 ag ...

随机推荐

  1. underscorejs 源码走读笔记

    Underscore 简介 Underscore 是一个JavaScript实用库,提供了类似Prototype.js的一些功能,但是没有继承任何JavaScript内置对象.它弥补了部分jQuery ...

  2. c#中设置像数量,价格,金额等的textbox的限制条件,用户只能输入数字或小数

    #region 设置数量等textbox控件样式及限制条件(具体调用的方法就是重写或直接调用ShieldNumberTextBoxOtherKeys函数) /// <summary> // ...

  3. mac 上传本地代码到 Github 教程

    网上有很多关于windows系统上传本地代码到github的文章,但是自己用的是mac,在网上也找了相关文章,实践的过程中还是遇到了很多问题,现在把自己的成功实践分享出来,希望能对大家有帮助. 1.首 ...

  4. &period;net core 2&period;0 redis驱动性能比拼

    今天来了三位主角,他们分别是大名鼎鼎的 StackExchange.Redis,无敌轻巧的 CSRedis,中通日处理80亿访问的 NewLife.Redis. 作者从2016年学习.netcore以 ...

  5. webpack打包样式代码去重

    一.问题描述 控制台审查样式,同一个样式被导入很多遍,每调用一次@import "common.less";打包时都会多出一份类似的样式代码. 二.问题分析 补上... 三.解决方 ...

  6. npm run build 打包后,如何运行在本地查看效果(Nginx服务)

    这段时间,研究了一下vue 打包的很慢的问题.但是当我 npm run build 打包后,在本地查看效果的时候,活生生被我老大鄙视了,因为我打开了XAMPP.他说:你怎么不用Nginx啊?用这个一堆 ...

  7. ORA-01555快照过旧报错

    一.现象 将数据迁移到新库时,执行较大的存过,会报这个错误. 二.原因 产生该报错的原因: (1)sql执行比较久,需要优化sql (2)回滚段过小 (3)undo保存时间过短 三.具体检查及恢复 1 ...

  8. MySQL 登陆

    #==========================登陆mysql ============================================ # 登陆用户名:-u,登陆IP: -h, ...

  9. &lbrack;转载&rsqb;RabbitMQ消息可靠性分析

    有很多人问过我这么一类问题:RabbitMQ如何确保消息可靠?很多时候,笔者的回答都是:说来话长的事情何来长话短说.的确,要确保消息可靠不只是单单几句就能够叙述明白的,包括Kafka也是如此.可靠并不 ...

  10. Centos6&period;5安装中文支持和中文输入法

     先来讲中文支持:    之前在网上查了不少资料,很多网友在网上都说,在shell命令下输入: # vi /etc/sysconfig/i18n 然后修改LANG="en_US.UTF-8& ...