分类 默认分类 下的文章

方案一:直接返回值

new Promise(function(resolve, reject) {

      setTimeout(() => resolve(1), 1000); // (*)

    }).then(function(result) { // (**)

      alert(result); // 1
      return result * 2;

    }).then(function(result) { // (***)

      alert(result); // 2
      return result * 2;

    }).then(function(result) {

      alert(result); // 4
      return result * 2;

    });

方案二:返回promise作为结果

new Promise(function(resolve, reject) {

  setTimeout(() => resolve(1), 1000);

}).then(function(result) {

  alert(result); // 1

  return new Promise((resolve, reject) => { // (*)
    setTimeout(() => resolve(result * 2), 1000);
  });

}).then(function(result) { // (**)

  alert(result); // 2

  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(result * 2), 1000);
  });

}).then(function(result) {

  alert(result); // 4
});

django 3.2版本文档:

HttpRequest内置API:
https://docs.djangoproject.com/zh-hans/3.2/ref/request-response/
数据库操作API:
https://docs.djangoproject.com/zh-hans/3.2/ref/models/querysets/
带表情的数据写入数据失败怎么解决:
https://blog.qqvbc.com/default/619.html
requests请求远程API代理问题、SSL问题、官方API文档:
https://blog.qqvbc.com/default/613.html
https://requests.readthedocs.io/en/latest/api/
rest风格的框架插件API文档:
https://www.django-rest-framework.org/api-guide/viewsets/

数据分页:

        page = request.POST.get('page')
        limit = request.POST.get('limit')

        querySet = articleModel.objects.all().order_by('-id')
        pager = Paginator(querySet, limit if limit else 10)
        items = []
        for item in pager.page(page if page else 1):
            items.append({id: item.id, title: item.title})

        JsonResponse({'data': data, 'count': pager.count if pager else len(data)})

报错内容类似:

django.db.utils.OperationalError: (1366, "Incorrect string value: '\xD9\x88\xDB\x95\xD8\xB3...' for column 'name' at row 1")

奇怪的是,我知道需要把数据库改为utf8mb4格式存储内容,而且也确定修改好了数据库编码问题。但应用里面死活还是报这个错误,有一点应用里面也需要配置字符集编码才能解决。

1.修改MySQL数据库、表和列,使用utf8mb4字符集(看这里怎么修改:https://blog.qqvbc.com/default/616.html
2.编辑 settings.py ,数据库配置那段里面,添加上数据库编码配置

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

注意:为避免失误,请先备份你的数据库!!!

一般情况下,我们会设置MySQL默认的字符编码为utf8,但是近些年来,emoji表情的火爆使用,给数据库带来了意外的错误,就是emoji的字符集已经超出了utf8的编码范畴

现在的应用一般不要在MySQL上使用utf8字符编码,推荐使用utf8mb4

utf8mb4是MySQL5.5.3版本之后支持的字符集,so,如果你需要使用这个字符集,前提条件是你的MySQL版本必须 >= 5.5.3

#查看当前系统默认的字符集设置
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

#修改database默认的字符集
ALTER DATABASE {database_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

#可以看到,虽然修改了database的字符集为utf8mb4,但是实际只是修改了database新创建的表,默认使用utf8mb4,原来已经存在的表,字符集并没有跟着改变,需要手动为每张表设置字符集



#只修改表默认的字符集
ALTER TABLE {table_name} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改表默认的字符集和所有字符列的字符集
ALTER TABLE {table_name} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改column默认的字符集
ALTER TABLE {table_name} CHANGE {column_name} {column_name} VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

检查字段的最大长度和索引列

字段长度

由于从utf8升级到了utf8mb4,一个字符所占用的空间也由3个字节增长到4个字节,但是我们当初创建表时,设置的字段类型以及最大的长度没有改变。例如,你在utf8下设置某一字段的类型为TINYTEXT, 这中字段类型最大可以容纳255字节,三个字节一个字符的情况下可以容纳85个字符,四个字节一个字符的情况下只能容纳63个字符,如果原表中的这个字段的值有一个或多个超过了63个字符,那么转换成utf8mb4字符编码时将转换失败,你必须先将TINYTEXT更改为TEXT等更高容量的类型之后才能继续转换字符编码

索引

在InnoDB引擎中,最大的索引长度为767字节,三个字节一个字符的情况下,索引列的字符长度最大可以达到255,四个字节一个字符的情况下,索引的字符长度最大只能到191。如果你已经存在的表中的索引列的类型为VARCHAR(255)那么转换utf8mb4时同样会转换失败。你需要先将VARCHAR(255)更改为VARCHAR(191)才能继续转换字符编码

修改配置文件

vim /etc/my.cnf
# 对本地的mysql客户端的配置
[client]
default-character-set=utf8mb4

# 对其他远程连接的mysql客户端的配置
[mysql]
default-character-set=utf8mb4

# 本地mysql服务的配置
[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4

> service mysqld restart

检查修改

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

修复&优化所有数据表

mysqlcheck -u root -p --auto-repair --optimize --all-databases

window 11系统,自己不知道设置过代理,请求python请求的时候遇到报错 ProxyError 感觉莫名其妙 的,之前钉钉也是加载不了图片,死活找不到原因

# 压根儿不用这么麻烦,直接两种方式: 
# 方法一:
session = requests.Session()
session.trust_env = False
response = session.get('http://ff2.pw') 
 
# 方法二:(多人亲测可以直接结局这个问题)
proxies = { "http": None, "https": None}
requests.get("http://ff2.pw", proxies=proxies)
 
# 都可以绕过系统设置的代理就好了

加上参数:verify=False,可以不验证SSL,解决SSLError报错问题,在开发环境或者不需要验证SSL证书的时候一定会遇到

如果不需要跟随重定向,则可以使用参数:allow_redirects=False

result = requests.get(url, proxies={"http": None, "https": None}, verify=False, allow_redirects=False)
#result.history是重定向历史
print(result.history, result.headers, result.headers.get('Location'))