文章目录
注意事项
持久连接
参数: CONN_MAX_AGE
含义: 一个数据库保持连接的时长,以秒为整数。
默认值: 0 ,表示每次请求请求结束都关闭.
要启用持久连接,可将 CONN_MAX_AGE 设置为正整数秒。对于无限制的持久连接,将其设置为 None。
有时,数据库不会被大多数视图访问,例如因为它是外部系统的数据库,或者由于缓存的原因。在这种情况下,你应该将 CONN_MAX_AGE 设置为一个低值,甚至 0,因为维护一个不太可能被重复使用的连接是没有意义的。这将有助于保持这个数据库的同时连接数较少。
开发服务器每处理一个请求都会创建一个新的线程,消除了持久连接的影响。在开发过程中不要启用它们。
当 Django 建立与数据库的连接时,它会根据所使用的后端设置相应的参数。如果你启用了持久化连接,就不再每次请求都重复这种设置。如果你修改了连接的隔离级别或时区等参数,你应该在每次请求结束时恢复 Django 的默认值,在每次请求开始时强制设置一个合适的值,或者禁用持久连接。
编码
Django 假设所有的数据库都使用 UTF-8 编码。
上面大都是官方文档中写的废话,下面,是一次连接本地MySQL数据库的成功尝试。先将参考写在前面:
这篇文章的参考,主体来源于B站的一位UP视频,先放这里:20分钟快速用django+mysql+pycharm搭建一个自己的web网站,读者也可以参考该视频,觉得好的话,还可以投个币.
正文开始: 环境
首先,pycharm中要安装Django和Pymysql
版本可以如下配置:
Django==3.0.8
pymysql==0.9.3
设置
本项目名,暂时叫做job_demo
,当新建好时,它下面就创建了一个同名应用job_demo
导入包
- 在项目同名包下__init__.py里面添加
import pymysql
pymysql.install_as_MySQLdb()
设置数据库
在setting.py中,把DATABASES中的内容换掉:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#数据库的类型
'NAME': 'test', #所使用的的数据库的名字
'USER': 'root', #数据库服务器的用户
'PASSWORD': '1234', #密码
'HOST': '127.0.0.1', #主机
'PORT': '3306', #端口
}
}
其中,数据库的名字,指向本地的数据库名.
如果不存在,则需要新建
create database test;
基础数据先迁移一次
运行服务器,访问127.0.0.1:8000/admin/
,
报错no such table: django_session
而
sessions
是Django内置的app,
在setting.py的INSTALLED_APPS
中可以找到
我的提示是: 1146, “Table ‘test.auth_user’ doesn’t exist”
那么,就需要迁移至数据库:
执行迁移
将项目中原有的应用的模型同步迁移到数据库.
首先,断开服务器,然后,输入
python manage.py migrate
可能出错
- 若提示错误:
ImporperlyConfigured (‘mysqlclient 1.3.13 or newer is requireed;…’)
则打开文件夹:venv>lib>site-packages>django>db>backends>mysql>base.py
把这两行代码注释:
if version < (1, 4, 0):
raise ImproperlyConfigured('mysqlclient 1.4.0 or newer is required; you have %s.' % Database.__version__)
- 出现错误:
Unable to create the django_migrations table
,其原因:
Django2.1之后不再支持MySQL5.5,必须5.6版本以上,我的本地数据库是mysql5.5所以报错了
解决: django降级
pip install Django==2.0.0 -i https://pypi.douban.com/simple
参考文章:Unable to create the django_migrations table ((1064, "You have an error in your SQL syntax;
- 再次运行
python manage.py migrate
.此时查看数据库,可看到映射成功。
即: 在test数据库中导入了好几个表.
重新访问admin
运行服务器,访问127.0.0.1:8000/admin/
,可以成功.
如果没有Django管理员账户,就需要创建一个.使用命令
python manage.py createsuperuser
密码在这里
自定义表,然后迁移,例如连接数据库做一个登录
在model.py中创建模型
首先,这是在一个叫login_web
的应用里进行的~
class UserInfo(models.Model):
id = models.IntegerField(primary_key = True)
name = models.CharField(unique=True,max_length=45,blank=True,null=True)
pwd = models.CharField(max_length=45,blank=True,null=True)
def __str__(self): # 便于查看的一个函数
return self.name
迁移到数据库
-
配置
先把login_web
应用中的文件注册到根文件
操作上,把''login_web.apps.LoginWebConfig''
写入项目同名应用的settings.py
中INSTALLED_APPS
-
迁移
然后这样迁移:
python manage.py makemigrations login_web
python manage.py migrate
- 查看数据库
此时,查看数据库,应该出现了一个新表,我这里叫做 login_web_userinfo:
连通之后,就可以编写判断逻辑了
首先,先往数据库中放一条数据,注明了已注册者的登录信息
01 | 张三 | 123456 |
---|
在views.py中编写:
from django.http import HttpResponse
from .models import *
def Login_view(request):
u = request.POST.get("name",'')
p = request.POST.get("pwd",'')
if u and p:
c = UserInfo.objects.filter(stu_name=u,stu_pwd=p).count()
if c>=1:
return HttpResponse("登录成功")
else:
return HttpResponse("账号密码错!")
else:
return HttpResponse("请输入正确的账号密码!")
此外
还可以将已存在的表映射为Django代码
这个的目的,是将数据库中已经存在的表,映射为models.py
中类的创建代码.这样,就可以在view.py
中引用,并编写视图逻辑了~
创建表
首先,在库中创建想要的表.比如表在test/Tables/class_stu
映射
接着,为了将数据库中的表,映射到polls/model.py
中,需要执行命令:
python manage.py inspectdb>polls/models.py
然后,就可以在models.py
中,看到相应]的类的创建代码了
注册并写入数据库
已经有什么
在此之前,应该已经有登录界面,并配置好路由选项了~
具体的来说:
html网页:
输入用户名的框,属性name='user'
; 密码的,name=pwd
该界面已经被调用.即:应该一上来,就看到登录或注册界面.
路由配置: 放在了polls.url
里,或者直接注册到了根URLconf
注册视图逻辑
这里主要写视图逻辑.
def reg(request):
name = request.POST.get("user",'')
pwd = request.POST.get("pwd",'')
if name and pwd:
stu = StudentInfo(stu_name = name, stu_pwd = pwd)
stu.save()
return HttpResponse("注册成功!")
else:
return HttpResponse("请输入完整的")