django索引
from django.db import models
class MyModel(models.Model):
field1 = models.CharField(max_length=100)
field2 = models.IntegerField()
class Meta:
unique_together = ('field1', 'field2') # 联合唯一索引
from django.db import models
class MyModel(models.Model):
field1 = models.CharField(max_length=100)
field2 = models.IntegerField()
class Meta:
unique_together = ('field1', 'field2') # 联合唯一索引
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),
]
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
命令参考
执行命令
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)