Django自带一个轻量的数据库sqlite, 不过在实际使用过程中,可能会出现各种莫名问题,所以,从移开时就连接其他数据库是个好方法.
个人比较喜欢使用mysql数据库
django连接已有数据库方法:
1.修改django的setting.py中默认DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
修改为
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 默认
'NAME': '连接的数据库',
'HOST': '# mysql的ip地址',
'PORT': # mysql的端口,
'USER': '# mysql的用户名',
'PASSWORD': ' # mysql的密码'
}
}
2.修改项目文件夹下的__init__.py文件
由于配置了Mysql,所以要替换默认的数据库引擎,在项目文件夹下的__init__.py,添加以下内容
import pymysql pymysql.install_as_MySQLdb()关于时区:
在编辑settings.py文件前,需要设置time_zone为自己的时区
修改后,获得时间方法应当改变
通常获得时间方法
import datetime now = datetime.datetime.now()
启用time zone后
import datetime from django.utils.timezone import utc utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)
除非软件功能附带用户可以设置所在时区,否则时间记录就让django代劳
国内时区采用
TIME_ZONE = 'Asia/Shanghai'
django默认自带了一些应用通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:
- django.contrib.admin -- 管理员站点, 你很快就会使用它。
- django.contrib.auth -- 认证授权系统。
- django.contrib.contenttypes -- 内容类型框架。
- django.contrib.sessions -- 会话框架。
- django.contrib.messages -- 消息框架。
- django.contrib.staticfiles -- 管理静态文件的框架。
这些应用被默认启用是为了给常规项目提供方便。
默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:
django模型在django中,数据库驱动的web应用第一部是定义模型:数据结构设计和附加的其他元数据
在polls app中,需要创建两个模型,question问题和choice选项:
question包括问题描述和发布时间,choice模型有两个字段,选项描述和内容
所有模型都被表示为django.db.models.Model类的子类
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
每个field类实例变量的名(如question_text, pub_date)将会作为数据库的列名,所以变量名的命名需要利于数据库查询
激活模型为了在工程中包含这个应用,需要配置installed_apps,因为pollsconfig类卸载文件polls/apps.py中,所以他的路径为'polls.apps.PollsConfig', 在mysite/settings.py中添加子项后看起来是这样
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
接着运行
# 苹果和linux $ python manage.py makemigrations polls # windows ...> py manage.py makemigrations polls
运行时可能出现的错误:
一、
No installed app with label 'polls'.
原因时没有在installed app中对模型进行配置
二、
数据迁移成功但是没有在数据库中建立对应的表:
可能是django的一个bug, 将app中对应的*_initial.py中将对应的迁移记录清除,重新建立表即可
API进入交互式Python命令行
py manage.py shell
我们使用这个命令而不是简单的使用“python”是因为 manage.py 会设置 DJANGO_SETTINGS_MODULE 环境变量,这个变量会让 Django 根据 mysite/settings.py 文件来设置 Python 包的导入路径
创建管理员账号py manage.py createsuperuser
键入想要使用的用户名和邮箱以及创建密码
Username: admin Email address: admin@example.com Password: ********** Password (again): ********* Superuser created successfully.
向管理页面中加入polls app
当我们进入管理页面后,我们得到这个界面
我们要在对应项目(polls app)的admin中添加项目对象
# polls/admin.py from django.contrib import admin from .models import Question admin.site.register(Question)
如何将模型中的字段名命名为中文名称
在模型对应的字段类下面添加class Meta即可
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
def was_published_tecently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Meta:
verbose_name = '问题'
verbose_name_plural = '问题'
想要将项目(polls app)名改为中文,可以直接在apps.py文件中,项目类下面创建verbose_name变量
class PollsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'polls'
verbose_name = '问答'



