django利用踩坑经历

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
DRF

利用drf获取序列化后的id
  1. visitor_serializer = VisitorSaveSerializer(data={…})
  2. if visitor_serializer.is_valid():
  3.     visitor = visitor_serializer.save()
  4.     visitor_id = visitor.pk
复制代码
postgrepsql踩坑

django利用postgrepsql,利用聚合函数如:sum 等,被引用的字段必须是浮点数或者整数,不能是字符串
解析Excel

注:假如xlrd版本不符合可导致出现:Excel xlsx file not supported报错
原因:xlrd1.2.0之后的版本不支持xlsx格式,支持xls格式
办法一:
卸载新版本 pip uninstall xlrd
安装老版本:pip install xlrd=1.2.0 (或者更早版本)
方法二:
将xlrd用到的excel版本格式修改为xls(保险起见,另存为xls格式)
建议:个人更推荐利用第二种方法

  1. filename = request.FILES.get('file') #获取文件
  2. name = filename.name
  3. type_excel = name.split(".")[1]
  4. if type_excel in ['xlsx','xls']: #判断文件是否
  5.     #开始解析表格
  6.     wb = xlrd.open_workbook(filename=None, file_contents=filename.read())
  7.     table = wb.sheets()[0]
  8.     nrows = table.nrows  # 行数
  9.     item_list = []
  10.     try:
  11.         for specific in range(2, nrows):  # 从0开始把表头省略则读取表头信息,如果从1开始则直接读取数据
  12.             rowValues = table.row_values(specific)  # 一行的数据:list
复制代码
时间查询

  1. 按照周查询
  2.         now_time = datetime.datetime.now()
  3.         # 距离周日相隔的天数,这里得到int型数值
  4.         day_num = now_time.isoweekday()
  5.         # 查周日的日期,现在时间减去相隔天数得出周日的日期
  6.         week_day = (now_time - datetime.timedelta(days=day_num))
  7.         # 改格式,将datetime类型转换为
  8.         date类型
  9.         monday = week_day.date()
  10.         query_order = CrmOrder.objects.filter(order_time__range=(monday,now_time))
复制代码
setting配置

  1. DATA_UPLOAD_MAX_MEMORY_SIZE = 10485760  #数据上传最大内存大小,默认2.5mb,这里设置成最大10mb
复制代码
apscheduler定时任务

#注意:定时任务执行的函数需要写入路由
根据某个时间去创造定时任务
  1. INSTALLED_APPS =[
  2. 'django_apscheduler'
  3. ]
  4. from apscheduler.schedulers.background import BackgroundScheduler
  5. from django_apscheduler.jobstores import DjangoJobStore, register_job, register_events
  6. # 实例化调度器
  7. scheduler = BackgroundScheduler()
  8. scheduler.add_jobstore(DjangoJobStore(),"default")
  9. #根据重启时间创建定时任务 到时间发送消息给申请人询问是否要重启项目
  10. message_prompt:需要执行的函数 其他参数:年月日时分秒
  11. scheduler.add_job(message_prompt, "cron", year=recovery_time.year, month=recovery_time.month,
  12.                    day=recovery_time.day,
  13.                    hour=recovery_time.hour, minute=recovery_time.minute, kwargs={'id':info_poj.id},
  14.                    coalesce=False)
复制代码
指定时间去执行函数
  1. # 实例化调度器
  2. scheduler = BackgroundScheduler()
  3. # 调度器使用crm_order_add
  4. seconds定时多长时间执行 秒单位
  5. scheduler.add_job(crm_order_add, "interval", seconds=1800, args=['requeat'])  # 半小时执行一次接口
  6. # 监控任务——注册定时任务
  7. register_events(scheduler)
  8. # 调度器开始运行
  9. scheduler.start()
复制代码
获取url.py的name

  1.   current_url = request.resolver_match.url_name
  2.   
复制代码
中心件

  1. 创建mymiddleware文件夹,创建自己的中间件py
  2. 如:让某个文件夹访问需要token
  3. from django.http import HttpResponseRedirect, HttpResponse
  4. from django.utils.deprecation import MiddlewareMixin
  5. # 设置路由需要验证的名单
  6. from center.models import Users
  7. # whiteUrls = ['media']
  8. #
  9. # class UserAuthMiddleWare(MiddlewareMixin):
  10. #     #访问路由需要token验证
  11. #     def process_request(self, request):
  12. #         print(request.path)
  13. #         pat = request.path #访问路径
  14. #
  15. #         if pat.split('/')[1] in whiteUrls:
  16. #             token = request.META['HTTP_AUTHORIZATION'] if 'HTTP_AUTHORIZATION' in request.META else None
  17. #             try:
  18. #
  19. #                 userinfo = Users.objects.filter(token=token).first()
  20. #             except Exception as e:
  21. #                 return HttpResponse("PleaseStayAway!")
  22. #             if userinfo is None:
  23. #                 return HttpResponse("PleaseStayAway!")
  24. 在setting的MIDDLEWARE中导入
  25. MIDDLEWARE = [
  26.     "mymiddleware.中间件名称.UserAuthMiddleWare"
  27. ]
  28. 即可
复制代码
分页工具

  1. #工具函数
  2. from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
  3. def paging_component(reports,pagesize,num_p):
  4.     """
  5.     :param reports: 对象数据
  6.     :param pagesize: 一页显示多少个。默认3个
  7.     :param num_p: 第几页
  8.     :return: 分页后的对象数据
  9.     """
  10.     paginator = Paginator(reports, pagesize)
  11.     count = paginator.count  # 需要分类数据的对象总数
  12.     num_pages = paginator.num_pages  # 需要分类数据的对象总数
  13.     try:
  14.         reports = paginator.page(int(num_p))
  15.     except PageNotAnInteger:
  16.         reports = paginator.page(number=1)
  17.     except EmptyPage:
  18.         reports = paginator.page(1)
  19.     # print(reports)
  20.     return {"reports":reports,"count":count,"num_pages":num_pages}
  21.    
  22. #使用方法
  23. pagesize = request.GET.get('pagesize', 10) #pagesize 一页显示多少个。默认3个
  24. page = request.GET.get('page', 1)  # 以page为键得到默认的页面1
  25. reports:queryset对象列
  26. reports = paging_component(reports,pagesize,page)
  27. reports['reports'].object_list #获取分页后的数据
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表