diff --git a/auto_pt/migrations/0001_initial.py b/auto_pt/migrations/0001_initial.py new file mode 100644 index 0000000..d62f678 --- /dev/null +++ b/auto_pt/migrations/0001_initial.py @@ -0,0 +1,289 @@ +# Generated by Django 4.1 on 2022-08-25 13:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Notify", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ( + "name", + models.CharField( + choices=[ + ("wechat_work_push", "企业微信通知"), + ("wxpusher_push", "WxPusher通知"), + ("pushdeer_push", "PushDeer通知"), + ("bark_push", "Bark通知"), + ], + default="wechat_work_push", + max_length=64, + verbose_name="通知方式", + ), + ), + ( + "enable", + models.BooleanField( + default=True, help_text="只有开启才能发送哦!", verbose_name="开启通知" + ), + ), + ( + "corpid", + models.CharField( + blank=True, + help_text="微信企业ID", + max_length=64, + null=True, + verbose_name="企业ID", + ), + ), + ( + "corpsecret", + models.CharField( + blank=True, + help_text="应用的Secret/Token", + max_length=64, + null=True, + verbose_name="Secret", + ), + ), + ( + "agentid", + models.CharField( + blank=True, + help_text="APP ID", + max_length=64, + null=True, + verbose_name="应用ID", + ), + ), + ( + "touser", + models.CharField( + blank=True, + help_text="接收者用户名/UID", + max_length=64, + null=True, + verbose_name="接收者", + ), + ), + ( + "custom_server", + models.URLField( + blank=True, + help_text="无自定义服务器的,请勿填写!", + null=True, + verbose_name="自定义服务器", + ), + ), + ], + options={"verbose_name": "通知推送", "verbose_name_plural": "通知推送",}, + ), + migrations.CreateModel( + name="OCR", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ( + "name", + models.CharField( + choices=[("baidu_aip", "百度OCR")], + default="baidu_aip", + max_length=64, + verbose_name="OCR", + ), + ), + ("enable", models.BooleanField(default=False, verbose_name="启用")), + ( + "api_key", + models.CharField( + blank=True, max_length=64, null=True, verbose_name="API-Key" + ), + ), + ( + "secret_key", + models.CharField( + blank=True, + help_text="应用的Secret", + max_length=64, + null=True, + verbose_name="Secret", + ), + ), + ( + "app_id", + models.CharField( + blank=True, + help_text="APP ID", + max_length=64, + null=True, + verbose_name="应用ID", + ), + ), + ], + options={"verbose_name": "OCR识别", "verbose_name_plural": "OCR识别",}, + ), + migrations.CreateModel( + name="Task", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ("name", models.CharField(max_length=32, verbose_name="任务名称")), + ("desc", models.CharField(max_length=32, verbose_name="任务描述")), + ], + options={ + "verbose_name": "任务", + "verbose_name_plural": "任务", + "ordering": ("name",), + }, + ), + migrations.CreateModel( + name="TaskJob", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ( + "job_id", + models.CharField(max_length=16, unique=True, verbose_name="任务ID"), + ), + ( + "trigger", + models.CharField( + choices=[("interval", "间隔任务"), ("cron", "cron任务")], + default="cron", + max_length=64, + verbose_name="任务类型", + ), + ), + ("task_exec", models.BooleanField(default=False, verbose_name="开启任务")), + ( + "replace_existing", + models.BooleanField( + default=True, + help_text="不设置此项重启项目后会报任务id已存在的错误, 设置此参数后会对已有的任务进行覆盖", + verbose_name="覆盖任务", + ), + ), + ( + "expression_time", + models.CharField( + help_text="在间隔任务表示间隔时长使用数字,单位:秒,corn任务中为corn表达式:“0 15 8 ? * * 2022”", + max_length=64, + verbose_name="时间表达式", + ), + ), + ( + "start_date", + models.DateTimeField(blank=True, null=True, verbose_name="任务开始时间"), + ), + ( + "end_date", + models.DateTimeField(blank=True, null=True, verbose_name="任务结束时间"), + ), + ( + "misfire_grace_time", + models.IntegerField( + default=120, + help_text="强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了", + verbose_name="任务运行时间", + ), + ), + ( + "jitter", + models.IntegerField( + default=120, + help_text="强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了", + verbose_name="时间浮动参数", + ), + ), + ( + "args", + models.CharField( + blank=True, + help_text="执行代码所需要的参数。", + max_length=128, + null=True, + verbose_name="任务参数", + ), + ), + ( + "task", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="auto_pt.task", + verbose_name="任务名称", + ), + ), + ], + options={"verbose_name": "计划任务", "verbose_name_plural": "计划任务",}, + ), + ] diff --git a/pt_site/migrations/0001_initial.py b/pt_site/migrations/0001_initial.py new file mode 100644 index 0000000..3a218e6 --- /dev/null +++ b/pt_site/migrations/0001_initial.py @@ -0,0 +1,867 @@ +# Generated by Django 4.1 on 2022-08-25 13:16 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Downloader", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ("name", models.CharField(max_length=12, verbose_name="名称")), + ( + "category", + models.CharField( + choices=[("Qb", "qBittorrent")], + default="Qb", + max_length=128, + verbose_name="下载器", + ), + ), + ("username", models.CharField(max_length=16, verbose_name="用户名")), + ("password", models.CharField(max_length=128, verbose_name="密码")), + ("host", models.CharField(max_length=32, verbose_name="HOST")), + ( + "port", + models.IntegerField( + default=8999, + validators=[ + django.core.validators.MaxValueValidator(65535), + django.core.validators.MinValueValidator(1001), + ], + verbose_name="端口", + ), + ), + ( + "reserved_space", + models.IntegerField( + default=30, + help_text="单位GB,最小为1G,最大512G", + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(512), + ], + verbose_name="预留磁盘空间", + ), + ), + ], + options={"verbose_name": "下载器", "verbose_name_plural": "下载器",}, + ), + migrations.CreateModel( + name="MySite", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ("sort_id", models.IntegerField(default=1, verbose_name="排序")), + ("user_id", models.CharField(max_length=16, verbose_name="用户ID")), + ("passkey", models.CharField(max_length=128, verbose_name="PassKey")), + ("cookie", models.TextField(verbose_name="COOKIE")), + ( + "hr", + models.BooleanField( + default=False, help_text="是否下载HR种子", verbose_name="开启HR下载" + ), + ), + ( + "sign_in", + models.BooleanField( + default=True, help_text="是否开启签到", verbose_name="开启签到" + ), + ), + ( + "search", + models.BooleanField( + default=True, help_text="是否开启搜索", verbose_name="开启搜索" + ), + ), + ("invitation", models.IntegerField(default=0, verbose_name="邀请资格")), + ( + "time_join", + models.DateTimeField(blank=True, null=True, verbose_name="注册时间"), + ), + ( + "latest_active", + models.DateTimeField(blank=True, null=True, verbose_name="最近活动时间"), + ), + ( + "sp_hour", + models.CharField(default="", max_length=8, verbose_name="时魔"), + ), + ( + "my_level", + models.CharField(default="", max_length=16, verbose_name="用户等级"), + ), + ( + "my_hr", + models.CharField(default="", max_length=16, verbose_name="H&R"), + ), + ("leech", models.IntegerField(default=0, verbose_name="当前下载")), + ("seed", models.IntegerField(default=0, verbose_name="当前做种")), + ("mail", models.IntegerField(default=0, verbose_name="新邮件")), + ("publish", models.IntegerField(default=0, verbose_name="发布种子")), + ], + options={"verbose_name": "我的站点", "verbose_name_plural": "我的站点",}, + ), + migrations.CreateModel( + name="Site", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ("name", models.CharField(max_length=32, verbose_name="站点名称")), + ( + "url", + models.URLField( + default="", help_text='请保留网址结尾的"/"', verbose_name="站点网址" + ), + ), + ( + "logo", + models.URLField( + default="", help_text="站点logo图标", verbose_name="站点logo" + ), + ), + ( + "sign_in_support", + models.BooleanField(default=True, verbose_name="签到支持"), + ), + ( + "get_torrent_support", + models.BooleanField(default=True, verbose_name="拉取首页种子"), + ), + ( + "get_userinfo_support", + models.BooleanField(default=True, verbose_name="获取个人数据"), + ), + ( + "search_support", + models.BooleanField(default=False, verbose_name="搜索支持"), + ), + ( + "page_default", + models.CharField( + default="torrents.php", max_length=64, verbose_name="默认搜索页面" + ), + ), + ( + "page_sign_in", + models.CharField( + default="attendance.php", max_length=64, verbose_name="默认签到链接" + ), + ), + ( + "page_detail", + models.CharField( + default="details.php?id={}", + max_length=64, + verbose_name="详情页面链接", + ), + ), + ( + "page_download", + models.CharField( + default="download.php?id={}", + max_length=64, + verbose_name="默认下载链接", + ), + ), + ( + "page_user", + models.CharField( + default="userdetails.php?id={}", + max_length=64, + verbose_name="用户信息链接", + ), + ), + ( + "page_search", + models.CharField( + default="torrents.php?search={}", + max_length=64, + verbose_name="搜索链接", + ), + ), + ( + "page_leeching", + models.CharField( + default="getusertorrentlistajax.php?userid={}&type=leeching", + max_length=64, + verbose_name="当前下载信息", + ), + ), + ( + "page_uploaded", + models.CharField( + default="getusertorrentlistajax.php?userid={}&type=uploaded", + max_length=64, + verbose_name="发布种子信息", + ), + ), + ( + "page_seeding", + models.CharField( + default="getusertorrentlistajax.php?userid={}&type=seeding", + max_length=64, + verbose_name="当前做种信息", + ), + ), + ( + "page_completed", + models.CharField( + default="getusertorrentlistajax.php?userid={}&type=completed", + max_length=64, + verbose_name="完成种子信息", + ), + ), + ( + "page_mybonus", + models.CharField( + default="mybonus.php", max_length=64, verbose_name="魔力值页面" + ), + ), + ( + "page_viewfilelist", + models.CharField( + default="viewfilelist.php?id={}", + max_length=64, + verbose_name="文件列表链接", + ), + ), + ( + "page_viewpeerlist", + models.CharField( + default="viewpeerlist.php?id={}", + max_length=64, + verbose_name="当前用户列表", + ), + ), + ( + "sign_in_method", + models.CharField( + default="get", + help_text="get或post,请使用小写字母,默认get", + max_length=5, + verbose_name="签到请求方法", + ), + ), + ( + "sign_in_captcha", + models.BooleanField( + default=False, help_text="有签到验证码的站点请开启", verbose_name="签到验证码" + ), + ), + ( + "sign_in_params", + models.CharField( + blank=True, + default="{}", + help_text="默认无参数", + max_length=128, + null=True, + verbose_name="签到请求参数", + ), + ), + ( + "sign_in_headers", + models.CharField( + default="{}", + help_text='字典格式:{"accept":"application/json","c":"d"},默认无参数', + max_length=128, + verbose_name="签到请求头", + ), + ), + ( + "hr", + models.BooleanField( + default=False, help_text="站点是否开启HR", verbose_name="H&R" + ), + ), + ( + "hr_rate", + models.IntegerField( + default=2, help_text="站点要求HR种子的分享率,最小:1", verbose_name="HR分享率" + ), + ), + ( + "hr_time", + models.IntegerField( + default=10, + help_text="站点要求HR种子最短做种时间,单位:小时", + verbose_name="HR时间", + ), + ), + ( + "sp_full", + models.FloatField(default=0, help_text="时魔满魔", verbose_name="满魔"), + ), + ( + "limit_speed", + models.IntegerField( + default=100, + help_text="站点盒子限速,家宽用户无需理会,单位:MB/S", + verbose_name="上传速度限制", + ), + ), + ( + "torrents_rule", + models.CharField( + default='//table[@class="torrents"]/tr', + max_length=128, + verbose_name="种子行信息", + ), + ), + ( + "name_rule", + models.CharField( + default='.//td[@class="embedded"]/a/b/text()', + max_length=128, + verbose_name="种子名称", + ), + ), + ( + "title_rule", + models.CharField( + default=".//tr/td[1]/text()", + max_length=128, + verbose_name="种子标题", + ), + ), + ( + "detail_url_rule", + models.CharField( + default='.//td[@class="embedded"]/a[contains(@href,"detail")]/@href', + max_length=128, + verbose_name="种子详情", + ), + ), + ( + "category_rule", + models.CharField( + default='.//td[@class="rowfollow nowrap"][1]/a[1]/img/@class', + max_length=128, + verbose_name="分类", + ), + ), + ( + "poster_rule", + models.CharField( + default=".//table/tr/td[1]/img/@src", + max_length=128, + verbose_name="海报", + ), + ), + ( + "magnet_url_rule", + models.CharField( + default='.//td/a[contains(@href,"download")]/@href', + max_length=128, + verbose_name="下载链接", + ), + ), + ( + "download_url_rule", + models.CharField( + default='.//a[contains(@href,"download.php?id=") and contains(@href,"passkey")]/@href', + max_length=128, + verbose_name="种子链接", + ), + ), + ( + "size_rule", + models.CharField( + default=".//td[5]/text()", max_length=128, verbose_name="文件大小" + ), + ), + ( + "hr_rule", + models.CharField( + default='.//table/tr/td/img[@class="hitandrun"]/@title', + max_length=128, + verbose_name="H&R", + ), + ), + ( + "sale_rule", + models.CharField( + default='.//table/tr/td/img[contains(@class,"pro_")]/@alt', + max_length=128, + verbose_name="促销信息", + ), + ), + ( + "sale_expire_rule", + models.CharField( + default=".//table/tr/td/font/span/@title", + max_length=128, + verbose_name="促销时间", + ), + ), + ( + "release_rule", + models.CharField( + default=".//td[4]/span/@title", + max_length=128, + verbose_name="发布时间", + ), + ), + ( + "seeders_rule", + models.CharField( + default=".//td[6]/b/a/text()", + max_length=128, + verbose_name="做种人数", + ), + ), + ( + "leechers_rule", + models.CharField( + default=".//td[7]/b/a/text()", + max_length=128, + verbose_name="下载人数", + ), + ), + ( + "completers_rule", + models.CharField( + default=".//td[8]/a/b/text()", + max_length=128, + verbose_name="完成人数", + ), + ), + ( + "viewfilelist_rule", + models.CharField( + default=".//td/text()", max_length=128, verbose_name="解析文件结构" + ), + ), + ( + "viewpeerlist_rule", + models.CharField( + default=".//tr/td[9]/nobr/text()", + max_length=128, + verbose_name="平均下载进度", + ), + ), + ( + "peer_speed_rule", + models.CharField( + default=".//tr/td[5]/nobr/text()", + max_length=128, + verbose_name="平均上传速度", + ), + ), + ( + "remark", + models.TextField( + blank=True, default="", null=True, verbose_name="备注" + ), + ), + ( + "invitation_rule", + models.CharField( + default='//a[contains(@href,"invite.php?id=")]/following-sibling::text()[1]', + max_length=128, + verbose_name="邀请资格", + ), + ), + ( + "time_join_rule", + models.CharField( + default='//td[contains(text(),"加入")]/following-sibling::td/span/@title', + max_length=128, + verbose_name="注册时间", + ), + ), + ( + "latest_active_rule", + models.CharField( + default='//td[contains(text(),"最近动向")]/following-sibling::td/span/@title', + max_length=128, + verbose_name="最后活动时间", + ), + ), + ( + "uploaded_rule", + models.CharField( + default='//font[@class="color_uploaded"]/following-sibling::text()[1]', + max_length=128, + verbose_name="上传量", + ), + ), + ( + "downloaded_rule", + models.CharField( + default='//font[@class="color_downloaded"]/following-sibling::text()[1]', + max_length=128, + verbose_name="下载量", + ), + ), + ( + "ratio_rule", + models.CharField( + default='//font[@class="color_ratio"][1]/following-sibling::text()[1]', + max_length=128, + verbose_name="分享率", + ), + ), + ( + "my_sp_rule", + models.CharField( + default='//a[@href="mybonus.php"]/following-sibling::text()[1]', + max_length=128, + verbose_name="魔力值", + ), + ), + ( + "hour_sp_rule", + models.CharField( + default='//div[contains(text(),"每小时能获取")]/text()[1]', + max_length=128, + verbose_name="时魔", + ), + ), + ( + "my_bonus_rule", + models.CharField( + default='//font[@class="color_bonus" and contains(text(),"积分")]/following-sibling::text()[1]', + max_length=128, + verbose_name="保种积分", + ), + ), + ( + "my_level_rule", + models.CharField( + default='//span[@class="medium"]/span[@class="nowrap"]/a[contains(@class,"_Name")]/@class', + max_length=128, + verbose_name="用户等级", + ), + ), + ( + "my_hr_rule", + models.CharField( + default="//tr[14]/td[2]/a/text()", + max_length=128, + verbose_name="H&R", + ), + ), + ( + "leech_rule", + models.CharField( + default='//img[@class="arrowdown"]/following-sibling::text()[1]', + max_length=128, + verbose_name="下载数量", + ), + ), + ( + "seed_rule", + models.CharField( + default='//img[@class="arrowup"]/following-sibling::text()[1]', + max_length=128, + verbose_name="做种数量", + ), + ), + ( + "record_count_rule", + models.CharField( + default="/html/body/b/text()", + max_length=128, + verbose_name="种子记录数", + ), + ), + ( + "seed_vol_rule", + models.CharField( + default="//tr/td[3]", + help_text="需对数据做处理", + max_length=128, + verbose_name="做种大小", + ), + ), + ( + "mailbox_rule", + models.CharField( + default='//a[@href="messages.php"]/following-sibling::text()[1]', + help_text="获取新邮件", + max_length=128, + verbose_name="邮件规则", + ), + ), + ( + "hash_rule", + models.CharField( + default='//tr[11]//td[@class="no_border_wide"][2]/text()', + max_length=128, + verbose_name="种子HASH", + ), + ), + ], + options={ + "verbose_name": "站点信息", + "verbose_name_plural": "站点信息", + "ordering": ["name"], + }, + ), + migrations.CreateModel( + name="TorrentInfo", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ( + "name", + models.CharField(default="", max_length=256, verbose_name="种子名称"), + ), + ( + "title", + models.CharField(default="", max_length=256, verbose_name="标题"), + ), + ( + "category", + models.CharField(default="", max_length=128, verbose_name="分类"), + ), + ( + "poster_url", + models.URLField(default="", max_length=512, verbose_name="海报链接"), + ), + ( + "detail_url", + models.URLField(default="", max_length=512, verbose_name="种子详情"), + ), + ("magnet_url", models.URLField(verbose_name="下载链接")), + ( + "download_url", + models.URLField(max_length=255, unique=True, verbose_name="种子链接"), + ), + ("size", models.IntegerField(default=0, verbose_name="文件大小")), + ( + "state", + models.BooleanField( + default=False, max_length=16, verbose_name="推送状态" + ), + ), + ( + "save_path", + models.FilePathField( + default="/downloads/brush", verbose_name="保存路径" + ), + ), + ("hr", models.BooleanField(default=False, verbose_name="H&R")), + ( + "sale_status", + models.CharField(default="无促销", max_length=16, verbose_name="优惠状态"), + ), + ( + "sale_expire", + models.CharField(default="无限期", max_length=32, verbose_name="到期时间"), + ), + ( + "on_release", + models.CharField(default="", max_length=32, verbose_name="发布时间"), + ), + ( + "seeders", + models.CharField(default="0", max_length=8, verbose_name="做种人数"), + ), + ( + "leechers", + models.CharField(default="0", max_length=8, verbose_name="下载人数"), + ), + ( + "completers", + models.CharField(default="0", max_length=8, verbose_name="完成人数"), + ), + ( + "hash_string", + models.CharField( + default="", max_length=128, verbose_name="Info_hash" + ), + ), + ( + "viewfilelist", + models.CharField(default="", max_length=128, verbose_name="文件列表"), + ), + ( + "viewpeerlist", + models.FloatField(default=0, max_length=128, verbose_name="下载总进度"), + ), + ( + "peer_list_speed", + models.FloatField(default=0, max_length=128, verbose_name="平均上传速度"), + ), + ( + "downloader", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="pt_site.downloader", + verbose_name="下载器", + ), + ), + ( + "site", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="pt_site.site", + verbose_name="所属站点", + ), + ), + ], + options={"verbose_name": "种子管理", "verbose_name_plural": "种子管理",}, + ), + migrations.CreateModel( + name="SiteStatus", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ( + "uploaded", + models.CharField(default="0", max_length=16, verbose_name="上传量"), + ), + ( + "downloaded", + models.CharField(default="0", max_length=16, verbose_name="下载量"), + ), + ("ratio", models.FloatField(default=0, verbose_name="分享率")), + ("my_sp", models.FloatField(default=0, verbose_name="魔力值")), + ("my_bonus", models.FloatField(default=0, verbose_name="做种积分")), + ("seed_vol", models.IntegerField(default=0, verbose_name="做种体积")), + ( + "site", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="pt_site.mysite", + verbose_name="站点名称", + ), + ), + ], + options={"verbose_name": "我的数据", "verbose_name_plural": "我的数据",}, + ), + migrations.CreateModel( + name="SignIn", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="创建时间"), + ), + ( + "updated_at", + models.DateTimeField(auto_now=True, verbose_name="更新时间"), + ), + ( + "sign_in_today", + models.BooleanField(default=False, verbose_name="签到"), + ), + ( + "site", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="pt_site.mysite", + verbose_name="站点名称", + ), + ), + ], + options={"verbose_name": "签到", "verbose_name_plural": "签到",}, + ), + migrations.AddField( + model_name="mysite", + name="site", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + to="pt_site.site", + verbose_name="站点", + ), + ), + ] diff --git a/pt_site/views.py b/pt_site/views.py index fcaeb3c..9b8874d 100644 --- a/pt_site/views.py +++ b/pt_site/views.py @@ -1,8 +1,8 @@ # Create your views here. import logging +import time from concurrent.futures.thread import ThreadPoolExecutor -import time from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore