Django 解决阿里云部署同步数据库报错的问题


Posted in Python onMay 14, 2020

写在最前面:

在阿里云租了一台服务器,搭建了一个博客,采用的是Ubuntu+Django+uwsgi+nginx+mysql的结构。

运行了一段时间后,我发现我忘记了django自带后台的密码!

然后很常规的修改密码的操作,就是无法登陆!

然后想再创建一个超级用户,登上去看看什么情况,结果创建超级用户又报错?

可是本地环境是ok的,然后同步数据库出错。。。反正没有对的。

然后同步数据库报错如下:

Django 解决阿里云部署同步数据库报错的问题

手机端截的图,查了一下报错,应该是setting.py的配置问题,然后我把生产上的代码拿下来看了下。

如下:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
 os.path.join(BASE_DIR, 'static'),
 #os.path.join(os.path.dirname(__file__), '../static/').replace('\\', '/'),
)

这里要注意,STATIC_ROOT和STATICFILES_DIRS只要配置一个就可以!

如果非要同时配置

请将

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

改为

STATIC_ROOT = os.path.join(BASE_DIR, '/static/')

然后同步数据库

接下来创建超级用户也没有问题了

登录到admin后台一看,原来的那个账号权限被关了。。。怪不得怎么修改密码都没有用。

有空会详细讲讲我在阿里云部署Django的过程。

补充知识:django2.0 foreignKey提示on_delete

据说在django2.0之前创建外键foreignKey的参数on_delete是有默认值的,所以这个参数可以不用填,但在2.0之后on_delete没有默认值了,所以这个参数一定要传,不然就报以下的错:

TypeError: __init__() missing 1 required positional argument: on_delete

所以现在就来说一下关于这个on_delete要传的参数所代表的含义

on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为

on_delete=models.CASCADE, # 删除关联数据,与之关联也删除

on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做

on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError

# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)

on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)

# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')

on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)

on_delete=models.SET, # 删除关联数据,

a. 与之关联的值设置为指定值,设置:models.SET(值)

b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

例,创建一对多外键

class UserType(models.Model):
 caption = models.CharField(max_length=32)
 
class UserInfo(models.Model):
 user = models.CharField(max_length=32)
 email = models.EmailField()
 user_type = models.ForeignKey(to="UserType",to_field="id",on_delete=models.CASCADE)

创建外键后,直接用models.xxxx.objects.create()创建数据时需要注意,外键这个值需要传关联表的对象,如下:

class UserType(models.Model):
 caption = models.CharField(max_length=32)
 
class UserInfo(models.Model):
 user = models.CharField(verbose_name='用户', max_length=32)
 email = models.EmailField()
 user_type = models.ForeignKey(to="UserType",to_field="id",on_delete=models.CASCADE)
-----------上面是的是在models.py,下面的是在views.py-------------
def test(requset):
 ut = models.UserType.objects.filter(id=1).first()
 #print(ut)
 models.UserInfo.objects.create(user='小明',email='abc@163.com',user_type=ut)
 return HttpResponse('ok')

一对多的继承代码:

class ForeignKey(ForeignObject):
 def __init__(self, to, on_delete, related_name=None, related_query_name=None,
 limit_choices_to=None, parent_link=False, to_field=None,
 db_constraint=True, **kwargs):
  super().__init__(to, on_delete, from_fields=['self'], to_fields=[to_field], **kwargs)

创建一对一

OneToOneField(ForeignKey)
  to,   # 要进行关联的表名
  to_field=None    # 要关联的表中的字段名称
  on_delete=None,    # 当删除关联表中的数据时,当前表与其关联的行的行为
 
 ###### 对于一对一 ######
 # 1. 一对一其实就是 一对多 + 唯一索引
 # 2.当两个类之间有继承关系时,默认会创建一个一对一字段
 # 如下会在A表中额外增加一个c_ptr_id列且唯一:
class C(models.Model):
nid = models.AutoField(primary_key=True)
part = models.CharField(max_length=12)
 
class A(C):
id = models.AutoField(primary_key=True)
code = models.CharField(max_length=1)

一对一的继承代码:

class OneToOneField(ForeignKey):
 def __init__(self, to, on_delete, to_field=None, **kwargs):
  kwargs['unique'] = True
  super().__init__(to, on_delete, to_field=to_field, **kwargs)

创建多对多

方式一:自定义关系表

class Host(models.Model):
 nid = models.AutoField(primary_key=True)
 hostname = models.CharField(max_length=32,db_index=True)
 ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
 port = models.IntegerField()
 b = models.ForeignKey(to="Business", to_field='id')
 # 10
class Application(models.Model):
 name = models.CharField(max_length=32)
 # 2
 
class HostToApp(models.Model):
 hobj = models.ForeignKey(to='Host',to_field='nid')
 aobj = models.ForeignKey(to='Application',to_field='id')
 
 
# HostToApp.objects.create(hobj_id=1,aobj_id=2)这里可以直接对第三张表直接操

方式二:自动创建关系表

class Host(models.Model):
 nid = models.AutoField(primary_key=True)
 hostname = models.CharField(max_length=32,db_index=True)
 ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
 port = models.IntegerField()
 b = models.ForeignKey(to="Business", to_field='id')
 # 10
class Application(models.Model):
 name = models.CharField(max_length=32)
 r = models.ManyToManyField("Host") --------------> appname_application_r 表名

无法直接对第三张表进行操作

只能间接操作————————————————————

obj = models.Application.objects.get(id=1)
obj.name
 
# 第三张表操作:HostToApp table   基于id=1的Application添加对应关系
obj.r.add(1)增
obj.r.add(2)
obj.r.add(2,3,4)
obj.r.add(*[1,2,3,4])
 
obj.r.remove(1)   删
obj.r.remove(2,4)
obj.r.remove(*[1,2,3])
 
obj.r.clear() 清除app_id =1 的列
 
obj.r.set([3,5,7])   改set将原来数据库中的关系先全部删除,在添加1-3,1-5,1-7
——————————————————————————
# 所有相关的主机对象“列表” QuerySet
obj.r.all()   obj.filter() obj.first()

前端取

{%for app in app_list%}
  <tr>
 <td>{{app.name}}</td>
 <td>{{app.r.all}}</td>
   </tr>
  {%endfor%}

多对多的继承代码:

class ManyToManyField(RelatedField):
 def __init__(self, to, related_name=None, related_query_name=None,
 limit_choices_to=None, symmetrical=None, through=None,
 through_fields=None, db_constraint=True, db_table=None,
 swappable=True, **kwargs):
  super().__init__(**kwargs)

以上这篇Django 解决阿里云部署同步数据库报错的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现根据窗口标题调用窗口的方法
Mar 13 Python
Python运算符重载用法实例
May 28 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
python对json的相关操作实例详解
Jan 04 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
Python微医挂号网医生数据抓取
Jan 24 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
Python 项目转化为so文件实例
Dec 23 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
python3 配置logging日志类的操作
Apr 08 Python
Python参数传递实现过程及原理详解
May 14 #Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 #Python
详解python中groupby函数通俗易懂
May 14 #Python
django 解决扩展自带User表遇到的问题
May 14 #Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 #Python
Python基于numpy模块实现回归预测
May 14 #Python
Django之全局使用request.user.username的实例详解
May 14 #Python
You might like
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
Python生成随机MAC地址
2015/03/10 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
python测试mysql写入性能完整实例
2018/01/18 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
Python修改DBF文件指定列
2020/12/19 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
C面试题
2015/10/08 面试题
中专自我鉴定范文
2013/10/16 职场文书
好的自荐信的要求
2013/10/30 职场文书
自荐信包含哪些内容
2013/10/30 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
干部个人对照检查材料
2014/08/25 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python