第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理函数里,在逻辑处理函数里接收原始图片进行保存,然后接收用户的裁剪坐标,利用python的Pillow模块图像处理模块里的PIL(图像库),将原始图片根据用户裁剪坐标进行裁剪 有两个重点:第一要准备好cropper头像裁剪插件,第二python环境要安装好Pillow模块 htnl页面 编写htnl页…
安装 REST框架要求以下内容: Python(3.5.3.6.3.7) Django(1.11.2.0.2.1.2.2) pip install djangorestframework pip install django-filter 配置 django的插件通常以app的形式出现. 添加'rest_framework'到settings文件中INSTALLED_APPS设置. INSTALLED_APPS = [ ... 'rest_framework', ] REST框架API的所有全局…
Logstash之所以强悍的主要原因是filter插件:通过过滤器的各种组合可以得到我们想要的结构化数据 1:grok正则表达式 grok**正则表达式是logstash非常重要的一个环节**:可以通过grok非常方便的将数据拆分和索引 语法格式: (?<name>pattern) ?<name>表示要取出里面的值,pattern就是正则表达式 例子:收集控制台输入,然后将时间采集出来 input {stdin{}}filter {   grok {       match =&g…
复习 """ 1.drf-jwt签发与校验源码 签发token的请求 - 登录请求 - ObtainJSONWebToken - post - 将账号密码丢给序列化类处理 - 得到user.token => 序列化类的全局钩子 要访问需要认证的视图类 - 访问前需要通过认证组件与权限组件的校验 - jwt认证和是否登录权限 - 给认证组件提供带有token请求头的请求,将token解析出user,返回 (user, token) => drf-jwt框架的jwt认…
效果图: 编辑按钮是默认的list_editable属性对应的插件(xadmin.plugins.editable) 放大按钮对应的是自定义插件. 自定义按钮源码: xplugin.py(保证能够直接或者间接被adminx.py引用到即可) # -*- coding:utf-8 -*- import xadmin from xadmin.views import BaseAdminPlugin, ListAdminView from xadmin.views.edit import ModelF…
1 .批量数据导入 主url from django.contrib import admin from django.urls import path, re_path, include urlpatterns = [ path('admin/', admin.site.urls), re_path(r'app01/', include(('app01.urls', 'app01'))) ] urls from django.urls import path, re_path, include…
一.django admin前言 1.admin的作用 为了方便后台开发者快速的部署测试环境,于是就产生了admin,admin主要是操作models中的类从而实现对数据库中的数据增删改查的操作. 2.admin的使用环境 1.首先项目中的models.py必须要有相应的类 from django.db import models class UserInfo(models.Model): name=models.CharField(max_length=32) email=models.Ema…
一 官网说明 过滤器插件对事件执行中介处理.通常根据事件的特征有条件地应用过滤器. 以下过滤器插件在下面可用. Plugin Description Github repository aggregate Aggregates information from several events originating with a single task logstash-filter-aggregate alter Performs general alterations to fields th…
复习 """ 1.vue如果控制html 在html中设置挂载点.导入vue.js环境.创建Vue对象与挂载点绑定 2.vue是渐进式js框架 3.vue指令 {{ }} v-text|html => 限制一次性渲染 v-once v-if|show v-if v-else-if v-else v-for v-model v-bind [c1, c2] | {active: isActive} v-on fn | fn(...) | fn($event, ...) {{…
用PYTHON ,DJANGO 做站,在通常的情况下,需要用到 orM 的查询方法,比如object.filter(tag__contains='keywords').... 在这种情况下,如果你跟踪 sql 语句,你会发现,SQL 语句会生成 select .... like bianry '%keywords%', 如果是这样的语句,在某些情况是下是会出问题的,也就是说查询出来的数据可能会比你预计的少. 如果你用 raw sql 查总数 select count(*) from table…
本文简单介绍一下 Logstash 的过滤插件 grok. Grok 的主要功能 Grok 是 Logstash 最重要的插件.它可以解析任意文本并把它结构化.因此 Grok 是将非结构化的日志数据解析为可查询的结构化数据的好方法.这个工具非常适合 syslog 日志.apache 和其他 web 服务器日志.mysql 日志,以及那些通常为人(而不是计算机)编写的日志格式. Grok 使用正则表达式提取日志记录中的数据,这也正是 grok 强大的原因.Grok 使用的正则表达式语法与 Perl…
功能:django中实现多条件查询 或关系: from django.db.models import Q return qs.filter(Q(notice_to_group__contains='所有用户')|Q(notice_to_group__contains='段级用户')) 效果: 与关系:只需将‘|’改为‘&’…
先汗一个,一个小功能又踢腾了一天.本来这个带Demo的,但是上面介绍的不是很详细.用的时候问题不大,主要问题在文件导入方面.以为这个插件的使用和其他的不一样. 1.首先是需要引入文件的位置:如图 需要把整个grid都考到vs下,vs中结构如下: 2.设置路径,将文件导入 Ext.Loader.setConfig({ enabled: true }); Ext.Loader.setPath('Ext.ux', '../ext-js4.2/ux'); Ext.require([ '*', 'Ext.…
有些日志(比如apache)不像nginx那样支持json可以使用grok插件 grok利用正则表达式就行匹配拆分 预定义的位置在 /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns apache的在文件grok-patterns 查看官方文档 https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.ht…
from django.db.models import Q Item.objects.filter(Q(creator=owner) | Q(moderated=False)) 代码示例: if(request.GET.has_key('search')): search = request.GET.get('search') logger.info(search) from django.db.models import Q jobs_set = models.Deploy.objects.…
maven filter简介 maven的resources插件,有一个filter的作用,能够在打包的时候,从特定文件里读取key-value对,替换配置文件中的占位符变量.很多线上线下有不同环境的应用,都是用这种方式来打包,只需要在文件中配置不同的值即可. 下面就是一个最简单的配置: <build> <finalName>Test</finalName> <filters> <filter>src/main/filters/${conf-di…
1 富文本编辑器--tinymce 2 分页器--pure pagination 视图中 all_orgs_list = CourseOrg.objects.all() try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 p = Paginator(all_orgs_list, 6, request=request) all_orgs = p.page(page) orgs_nums = all_org…
1  安装或导入 xadmin 1 pip 安装 2 源码导入 在新建项目中新建extra_apps文件夹并将下载后的源码解压放入 (推荐,方便后续我们可以在源码中自定义一些插件的使用) 注: 具体可参考这篇博文 http://blog.csdn.net/yuhan963/article/details/79091248 2 setting 的配置 1 如果采用源码放在django目录下extra_apps文件内的方式:则需将 extra_apps 文件加入到项目环境变量中去 sys.path.…
使用 date 插件解析字段中的日期,然后使用该日期或时间戳作为事件的 logstash 时间戳.对于排序事件和导入旧数据,日期过滤器尤其重要.如果您在事件中没有得到正确的日期,那么稍后搜索它们可能会出现问题. 如果时间戳尚未在事件中设置,logstash 将根据第一次看到事件(在输入时)创建一个时间戳.例如,对于文件输入,时间戳设置为每次读取的时间. 本文演示如何把现有的日志数据导入到 elasticsearch 中,并用日志中的时间信息设置事件的时间戳. 拆分日志信息 比如我们的日志格式如下…
SweetAlert Github:https://github.com/lipis/bootstrap-sweetalert 下载完后放入 /static/ 目录下 sweetalert.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SweetAlert 测试</title> <li…
以默认的related_link为例(即最后一列). 源码:xadmin.plugins.relate.RelatedMenuPlugin class RelateMenuPlugin(BaseAdminPlugin): use_related_menu = True # ...若干删减 def related_link(self, instance): #... 若干删减 return '<div class="dropdown related_menu pull-right"…
1. 插件的作用可以是全局的,也可以是只针对某个模型的.通过其 init_request控制是否加载此插件, demo如下: class SCPCardOverviewPlugin(BaseAdminPlugin): pool_overview=False#默认不加载此插件 def init_request(self, *args, **kwargs): return bool(self.pool_overview) xadmin.site.register_plugin(SCPCardOver…
1.使用类视图APIView重写API 类视图APIView,取代@api_view装饰器,代码如下: from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from snippets.models import Snippet from snippets.serializers import SnippetSe…
就象本章前面提到的一样,模板过滤器是在变量被显示前修改它的值的一个简单方法. 过滤器看起来是这样的: {{ name|lower }} 显示的内容是变量 {{ name }} 被过滤器 lower 处理后的结果,它功能是转换文本为小写. 使用 | 来应用过滤器. 过滤器可以被 串联 ,就是说一个过滤器的输出可以被输入到下一个过滤器.这里有一个常用的 需求,先转义文本到HTML,再转换每行到 <p> 标签: {{ my_text|escape|linebreaks }} 有些过滤器有参数.过滤器…
分页 继承APIView类的视图中添加分页 from rest_framework.pagination import PageNumberPagination class MyPageNumberPagination(PageNumberPagination): # 定义一个PageNumberPagination的子类 # 如需改变参数,重写其属性即可 page_size = 6 #每页显示条数 page_query_param = 'page' # url中的参数的key page_siz…
分页器是 Web 开发中常见的功能,看似简单的却经常隐藏着各种奇怪的坑,堪称 WEB 后端开发的一生之敌. 常见问题 边翻页边写入导致内容重复 某位用户正在浏览我的博客,他看到第一页最后一篇文章是 <Redis 缓存更新一致性>: 在他浏览第一页的过程中,我发布了一篇新文章.他继续浏览,发现第二页的第一篇文章仍然是 <Redis 缓存更新一致性>: 博客园使用的是时间倒序排列和limit..offset分页器,用 SQL 来描述就是: select * from posts whe…
2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2. 随着响应将字符串回复给浏览器 3. 从浏览器发送的请求中拿到字符串 cookie就是保存在浏览器上的字符串!!! 每一次请求都会携带着cookie 把要保存的信息都保存在用户的浏览器上 好处: 服务端不用存,减轻了服务器压力 坏处: 信息不安全 Session: 搭配Cookie使用 Sessi…
前言 当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面 PageNumberPagination:基础分页器,性能略差 LimitOffsetPagination:偏移分页器 CursorPagination:游标分页器,性能强大 PageNumberPagination 基础分页器PageNumberPagination,数据量越大性能越差. 首先我们在app中创建一个pagination.py文件,然后自定义一个分页器类,继承自Page…
要使用Django实现分页器,必须从Django中导入Paginator模块 from django.core.paginator import Paginator 假如现在有150条记录要显示,每页显示10条 >>> from django.core.paginator import Paginator#导入Paginator模块 >>> list1=[i for i in range(0,150)]#使用列表生成器生成一个包含150个数字的列表 >>&g…
一.分页器对象 from django.core.paginator import Paginator,EmptyPage book_list = Book.objects.all() #假设有100条数据#分页器 每页展示条数:8条paginator = Paginator(book_list, 8) #返回Paginator对象# print(paginator.count) #数据总条数 100# print(paginator.num_pages) #总页数 13# print(pagi…