分类 python 下的文章

pip install django_apscheduler

settings.py

INSTALLED_APPS = [

    # ...
    'django_apscheduler',
    # ...
]

app为应用目录
app下新建 scheduler.py

import time
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_job, register_events
import logging

print('django-apscheduler')

logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)
def job2(name):
    # 具体要执行的代码
    print('{} 任务运行成功!{}'.format(name,time.strftime("%Y-%m-%d %H:%M:%S")))

# 实例化调度器
scheduler = BackgroundScheduler()
# 调度器使用DjangoJobStore()
# 持久化会报错 注释掉
# scheduler.add_jobstore(DjangoJobStore(), "default")
# 添加任务1
# 每隔5s执行这个任务
@register_job(scheduler,"interval", seconds=5,args=['王路'],id='job1')
def job1(name):
    # 具体要执行的代码
    print('{} 任务运行成功!{}'.format(name,time.strftime("%Y-%m-%d %H:%M:%S")))

scheduler.add_job(job2,"interval",seconds=10,args=['王飞'],id="job2")

# 监控任务
register_events(scheduler)
# 调度器开始运行

app.apps.py修改

from django.apps import AppConfig
from django.conf import settings

class AppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'app'
    
    # 新增
    def ready(self):
        if settings.SCHEDULER_AUTOSTART:
            from .scheduler import scheduler
            scheduler.start()

新建 run.py

import os
import sys

def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

if __name__ == '__main__':
    sys.argv = ['manage.py', 'runserver', '127.0.0.1:8001']  # 指定默认运行的命令
    main()

安装pyinstall

pip install pyinstaller 

命令参考
img

执行命令

pyinstaller -F --name=run run.py --specpath .  

django setting
以下无效

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    )
}

正确用法
来自 https://blog.csdn.net/weixin_51098806/article/details/123674186#commentBox

MIDDLEWARE = [
    ...
    "projectname.utils.csrf_middleware.NotUseCsrfTokenMiddlewareMixin"
]

/project/project/utils

from django.utils.deprecation import MiddlewareMixin


class NotUseCsrfTokenMiddlewareMixin(MiddlewareMixin):

    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)

安装pymysql

pip install pymysql

django 配置

import pymysql
pymysql.install_as_MySQLdb()


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name_of_the_database',
        'HOST': 'localhost',
        'USER': 'root',
        'PASSWORD': 'your_mysql_password',
        'PORT': '3306',  # MySQL 默认端口
        'OPTIONS': {
            'charset': 'utf8mb4',  # 设置字符集为 utf8mb4
           },
        }
}

backend下目录结构

tree backend              
backend
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── signals.py
├── urls.py
└── views.py

__init__.py

default_app_config = 'backend.apps.BackendConfig'

apps.py

from django.apps import AppConfig


class BackendConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "backend"

    def ready(self):
        import backend.signals

signals.py

import os

from django.db.models.signals import pre_save, post_save
from backend.models import *
from django.core.cache import cache


@receiver(pre_save, sender=Article)
def article_pre_save(sender, instance, **kwargs):
    if instance.pk:
        cache.delete(f'article_{instance.id}')