晒晒我家小院子

0%

安装

1
pip install django-redis==4.9.0

配置

settings.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://10.211.55.5:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://10.211.55.5:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session

补充

django-redis 中文文档

创建用户,并配置权限

1
2
3
4
5
6
7
8
-- 创建数据库
create database database_name default charset=utf8mb4;
-- 创建用户
create user user_name identified by 'password';
-- 配置权限
grant all on database_name.* to 'user_name'@'%';
-- 刷新权限
flush privileges;

配置mysql

settings.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DATABASES = {
'default': { # 主机: 增删改
'ENGINE': 'django.db.backends.mysql',
'HOST': '192.168.103.210', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'user_name', # 数据库用户名
'PASSWORD': 'password', # 数据库用户密码
'NAME': 'database_name' # 数据库名字
},
'slave': { # 从机: 查
'ENGINE': 'django.db.backends.mysql',
'HOST': '192.168.103.210', # 数据库主机
'PORT': 8306, # 数据库端口
'USER': 'user_name', # 数据库用户名
'PASSWORD': 'password', # 数据库用户密码
'NAME': 'database_name' # 数据库名字
}
}

init.py

1
2
import pymysql
pymysql.install_as_MySQLdb()

数据库路由分发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MasterSlaveDBRouter(object):
"""数据库主从读写分离路由"""

def db_for_read(self, model, **hints):
"""读数据库"""
return "slave"

def db_for_write(self, model, **hints):
"""写数据库"""
return "default"

def allow_relation(self, obj1, obj2, **hints):
"""是否运行关联操作"""
return True

settings.py

1
2
# 配置读写分离
DATABASE_ROUTERS = ['project.utils.db_router.MasterSlaveDBRouter']

配置mysql主从同步

用docker快速搭建mysql,配置主从同步

一键部署fastdfs服务

  • 部署自有文件系统

  • 基于docker-compose实现快捷部署

  • 部署命令

    1
    docker-compose up -d
  • 项目链接地址

  • 这是部署在单服务器上,如果需要增加storage,可以自己单独增加

默认配置

1
2
3
4
5
6
7
8
# nginx/nginx.conf文件
listen 8888;
# tracker/conf/client.conf文件需要自己去修改
base_path=/tmp
tracker_server=公网ip:22122
http.tracker_server_port=8888 # 需要保证nginx.conf监听端口一样
# docker-compose.yml
TRACKER_SERVER 需要修改为公网ip

python客户端简单使用(测试)

1
pip install py3Fdfs
1
2
3
4
5
6
7
8
from fdfs_client.client import Fdfs_client, get_tracker_conf
tracker_path = get_tracker_conf('tracker/conf/client.conf')
client = Fdfs_client(tracker_path)
ret = client.upload_by_filename('/Users/myard/Desktop/cover.png')
print(ret)
"""
{'Group name': b'group1', 'Remote file_id': b'group1/M00/00/00/CgAEA2D1I6qALZ3lAABu0uHYmQI601.png', 'Status': 'Upload successed.', 'Local file name': '/Users/myard/Desktop/cover.png', 'Uploaded size': '27.71KB', 'Storage IP': b'1.15.144.243'}
"""

fastdfs使用技巧

自定义下载文件名
1
2
3
# 通过增加参数 filename=xxx
# 示例
http://file.myard.cn:8888/group1/M00/00/00/CgAEA2D1KkeAY9CxAABu0uHYmQI574.png?filename=newfile.png

配置setting.py

1
2
3
4
5
6
EMAIL_HOST = 'smtp.sina.cn'                 #SMTP地址
EMAIL_PORT = 25 #SMTP端口
EMAIL_HOST_USER = 'xxxxxxxxxxx@sina.cn' #我自己的邮箱
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxx' #我的邮箱密码
EMAIL_USE_TLS = False #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
EMAIL_FROM = 'xxxxxxxxxxx@sina.cn' #发件人

发送一个邮件

1
2
3
4
5
6
7
8
9
10
11
from django.core.mail import send_mail
send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)
# subject、message、from_email和 recipient_list 参数是必须的。
"""
subject:一个字符串,为邮件标题。
message:一个字符串,邮件正文。
from_email:一个字符串,发件人。
recipient_list:一个由邮箱地址组成的字符串列表。recipient_list 中的每一个成员都会在邮件信息的“To:”区域看到其它成员。
fail_silently: 是否报错,True的话表忽略异常。
connection: 表示这个的链接对象。
"""

一次性发送多个邮件

1
send_mass_mail(datatuple, fail_silently=False, auth_user=None,auth_password=None, connection=None)

例子

1
2
3
4
5
6
from django.core.mail import send_mass_mail

message1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])

send_mass_mail((message1, message2), fail_silently=False)

区别在于性能

  • send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。

补充