2024年10月


// 监听 URL 变化
const originalPushState = history.pushState;
const originalReplaceState = history.replaceState;
let lastUrl = window.location.href;

function handleUrlChange() {
  if (lastUrl !== window.location.href) {
    console.log("URL 发生变化:", window.location.href);
    window.location.reload();
  }
}

// 重写 pushState 和 replaceState 以监听 URL 改变
history.pushState = function (...args) {
  originalPushState.apply(history, args);
  handleUrlChange();
};

history.replaceState = function (...args) {
  originalReplaceState.apply(history, args);
  handleUrlChange();
};

// 监听浏览器的 popstate 事件(即用户通过浏览器的后退/前进按钮改变 URL)
window.addEventListener("popstate", handleUrlChange);

权限

"permissions": [
    "webRequest",
    "webRequestBlocking",
    "<all_urls>"
  ],

background.js

// 监听所有网络请求
chrome.webRequest.onBeforeSendHeaders.addListener(
  function (details) {
    console.log("Request URL:", details.url);
    console.log("Request Headers:", details.requestHeaders);
    
    // 返回无修改的headers
    return { requestHeaders: details.requestHeaders };
  },
  { urls: ["<all_urls>"] }, // 你可以将它限定为某些域名
  ["requestHeaders"],
);

// 监听响应
chrome.webRequest.onHeadersReceived.addListener(
  function (details) {
    // console.log("Response Headers for URL:", details.url);
    // console.log("Response Headers:", details.responseHeaders);
  },
  { urls: ["<all_urls>"] },
  ["responseHeaders"],
);

models.py

from django.db import models

class Image(models.Model):
    title = models.CharField(max_length =200, verbose_name="标题")
    created_at = models.DateTimeField(auto_now_add=True,editable=False, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now_add=True,editable=False, verbose_name='更新时间')

admin.py

from django.contrib.admin import AdminSite
from django.utils.translation import gettext_lazy as _
from django.contrib import admin

class MyAdminSite(AdminSite):
    login_template = None  # 移除登录模板,允许匿名访问

    def has_permission(self, request):
        """
        允许所有人访问,不需要登录。
        注意:这将使管理面板对所有人开放,包括匿名用户。
        """
        return True

# 实例化自定义的 AdminSite
my_admin_site = MyAdminSite()

# 注册你的模型
from .models import Image

class ImageAdmin(admin.ModelAdmin):
    list_display = ('id',)  # 显示 title 和 uploaded_at 字段
    search_fields = ('title',)  # 允许通过 title 字段搜索
    list_filter = ('status', 'updated_at',)  # 增加按上传日期过滤的功能

    def has_module_permission(self, request):
        """ 允许匿名用户访问此模块 """
        return True

    def has_view_permission(self, request, obj=None):
        """ 允许匿名用户查看对象 """
        return True

    def has_add_permission(self, request):
        """ 允许匿名用户添加对象 """
        return True

    def has_change_permission(self, request, obj=None):
        """ 允许匿名用户修改对象 """
        return True

    def has_delete_permission(self, request, obj=None):
        """ 允许匿名用户删除对象 """
        return True
my_admin_site.register(Image, ImageAdmin)

urls

from django.urls import path
from app.admin import *
urlpatterns = [
    path('', my_admin_site.urls),
    # path('admin/', admin.site.urls),
]

const inputElement = document.getElementById('declarePrice-0');

// 创建一个新的事件对象并赋值新的值
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set;
nativeInputValueSetter.call(inputElement, '100.00'); // 设定新的值

// 创建并触发 'input' 事件
const inputEvent = new Event('input', { bubbles: true });
inputElement.dispatchEvent(inputEvent); // 触发 React 的 onChange

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()