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 14 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
关于Python核心框架tornado的异步协程的2种方法详解
Aug 28 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
Python调用Windows命令打印文件
Feb 07 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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数组函数
2008/08/18 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
php中socket的用法详解
2014/10/24 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php无序树实现方法
2015/07/28 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
Python制作刷网页流量工具
2017/04/23 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
Python: 传递列表副本方式
2019/12/19 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
圣诞节红领巾广播稿
2014/02/03 职场文书
食品安全检查制度
2014/02/03 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
优秀员工演讲稿
2014/05/19 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python