月度归档: 2020 年 8 月

  • vue报错出现 [Vue warn]: Error compiling template

    vue报错出现 [Vue warn]: Error compiling template

    问题描述

    vue报错出现 [Vue warn]: Error compiling template

    出现的原因是把新建的实例放在了被绑定的组件当中

    <div id="app">
    	<script type="text/javascript">
    			新建的实例
    	</script>
    </div>

    解决方法

    <div id="app">
    </div>
    <script type="text/javascript">
    	新建的实例
    </script>
  • 宝塔面板曝出严重安全漏洞!利用难度0

    宝塔面板曝出严重安全漏洞!利用难度0

    昨日宝塔面板爆出严重bug,目前官方已经给宝塔面板用户发送短信提醒升级,影响范围包括了宝塔linux面板 7.4.2以及宝塔windows面板 6.8。直接访问 http://ip:888/pma 无需权限认证,即可直接登录phpmyadmin。

    问题描述

    宝塔面板官方发布紧急安全更新短信通知称,Linux面板7.4. 2 版本/Windows面板6. 8 版本存在安全隐患,官方已发布紧急更新,请所有使用此版本的用户务必升级到最新版,更新方法,登录面板直接升级更新即可,如更新出现问题,请登录宝塔论坛反馈或者联系客服反馈。

    解决办法

    据悉,Linux版本7.4.2版本的用户将更新到宝塔linux 正式版 7.4.3,Windows版本6.8的用户将更新到Windows 正式版6.9.0。

  • Django Python 后台 列表中 自定义权限 筛选 根据用户权限自动筛选列表

    Django Python 后台 列表中 自定义权限 筛选 根据用户权限自动筛选列表

    在Django的项目开发中,需求是要在后台得列表中非管理员用户只列出自己的相关记录。下面我们记录一下 admin.py 详细的代码并给出详解。

    class Sale_Admin(admin.ModelAdmin):
        list_display = ('customer','idc', 'line_type', 'charge_type',  'saler', 'graph_id', 'alarm_times')
        list_per_page = 20
        # list_editable = ['graph_id',]
        list_filter = ('customer', 'saler')
        search_fields = ['customer__name','idc__name','graph_id']
        ordering = ('idc',)
        readonly_fields = ('v_max', 'v_nf', 'update_time', 'alarm_times')
        def get_queryset(self, request):
            qs = super(Sale_Admin,self).get_queryset(request)
            # if request.user.is_superuser:
            #     return qs
            return qs.filter(saler=23)
        def has_add_permission(self, request):
            return False
        def has_change_permission(self, request, obj=None):
            return False
        def has_delete_permission(self, request, obj=None):
            return False
        def has_view_permission(self, request, obj=None):
            return False

    get_queryset 可以自定义对象列表,比如非管理员登录,我们只显示saler值为23的记录。

    当然还可以控制当前用是否能查看、修改、添加、删除权限。

    has_add_permission has_change_permission has_delete_permission has_view_permission 则是判断是否具有对应的权限。

    Django 官方文档:https://docs.djangoproject.com/en/3.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_queryset

  • django models反向关联related_name详解

    django models反向关联related_name详解

    先上表结构 models.py 代码如下

    class PeojectUser(models.Model):
        # 项目参与者
        user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
        project = models.ForeignKey(to='Project',on_delete=models.CASCADE)
        star = models.BooleanField(default=False)
        invitee = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
        create_datetime = models.DateTimeField(auto_now_add=True)

    django 执行 makemigrations 的时候,如果出现下面这种错误

    SystemCheckError: System check identified some issues:
    ERRORS:
    web.PeojectUser.invitee: (fields.E304) Reverse accessor for 'PeojectUser.invitee' clashes with reverse accessor for 'PeojectUser.user'.
            HINT: Add or change a related_name argument to the definition for 'PeojectUser.invitee' or 'PeojectUser.user'.
    web.PeojectUser.user: (fields.E304) Reverse accessor for 'PeojectUser.user' clashes with reverse accessor for 'PeojectUser.invitee'.
            HINT: Add or change a related_name argument to the definition for 'PeojectUser.user' or 'PeojectUser.invitee'.

    这个问题出现的原因很简单,就是因为我们我们在PeojectUser 项目中有2个字段都进行了一对多的引用了UserInfo 表,这样会给后面进行反向查询的时候,造成django无法处理,因此提示是说我们是需要指定related_name
    先说一个常规的问题:
    正常我们的操作:

    obj = UserInfo.objects.get(id=1)
    obj.projectuser_set.all()

    但是由于我们在PeojectUser设置了2个关联,因此在我们后续执行的时候,django不知道需要反向关联那个字段了。所以提示我们添加 related_name 字段
    针对上面的例子,我们做一下修改:

    ```python
    class PeojectUser(models.Model):
        # 项目参与者
        user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE,related_name='a')
        project = models.ForeignKey(to='Project',on_delete=models.CASCADE)
        star = models.BooleanField(default=False)
        invitee = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE,related_name='b')
        create_datetime = models.DateTimeField(auto_now_add=True)

    那么在设置了上面的格式后,如果要进行不同的反向关联,则就可以 使用如下方式:

    obj = UserInfo.objects.get(id=1)
    obj.a.all()
    obj.b.all()
  • 使用jquery获取url及url参数 修改某个参数 代码实例

    使用jquery获取url及url参数 修改某个参数 代码实例

    使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作,这里我们做一下记录

    jQuery获取url代码实例

    console.log(window.location.href);

    jQuery修改url中的某个参数代码示例

    // 修改url中的某个参数
    function changeURLArg(url,arg,arg_val){
        var pattern=arg+'=([^&]*)';
        var replaceText=arg+'='+arg_val;
        if(url.match(pattern)){
            var tmp='/('+ arg+'=)([^&]*)/gi';
            tmp=url.replace(eval(tmp),replaceText);
            return tmp;
        }else{
            if(url.match('[\?]')){
                return url+'&'+replaceText;
            }else{
                return url+'?'+replaceText;
            }
        }
        return url+'\n'+arg+'\n'+arg_val;
    }

    使用方法

    window.location = changeURLArg('当前地址或url字符串','参数名','参数值');

    jQuery获取url中的某个参数的值

    //获取url中的参数
    function getUrlParam(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
        var r = window.location.search.substr(1).match(reg);  //匹配目标参数
        if (r != null) return unescape(r[2]); return null; //返回参数值
    }

  • JQuery 如何获取select选中的值 图文教程

    JQuery 如何获取select选中的值 图文教程

    html代码

    <select id="ddl">
    <option value="100" emoney="12" >选项1</option>
    <option value="200" emoney="13" >选项2</option>
    <option value="300" emoney="14" >选项3</option>
    </select>

    Javascript代码部分

    //获取属性emoney的值
    var iteValue = $("#ddl").find("option:selected").attr("emoney");
    console.log('emoney的值:' + iteValue);
    //获取选中项的value
    var itemValue1 = $("#ddl").val();
    console.log('Value:' + itemValue1);
    //获取选中项的文本值
    var itemText = $("#ddl option:selected").text();
    console.log('Text:' + itemText);
    //获取选中项的文本值
    var itemText1 = $("#ddl").find("option:selected").text();
    console.log('Text:' + itemText1);

WeChat