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 文件夹遍历和文件查找的实例讲解
Apr 26 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
python实现二维插值的三维显示
Dec 17 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
Python3模拟curl发送post请求操作示例
May 03 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
python如何查看安装了的模块
Jun 23 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
javascript动画浅析
2012/08/30 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
详解angular element()方法使用
2017/04/08 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
python 生成不重复的随机数的代码
2011/05/15 Python
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python中for in的用法详解
2020/04/17 Python
python爬虫容易学吗
2020/06/02 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
十佳护士获奖感言
2014/02/18 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
干部考察材料范文
2014/12/24 职场文书
保留意见审计报告
2015/06/05 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL