作者文章归档:陈海峰

[ Mysql多对多SQL写法 ]


多对多(权限abrc)

表结构

1. 用户表 user

2. 用户&角色-中间表 user_role

3. 角色表 role

4. 角色&权限-中间表 role_power

5. 权限表 power

数据库查询**

使用内join查询(5连表)

  • user左连
  • user_role连
  • role连
  • role_power连
  • power
select `user`.id as user_id, `user`.username as 用户名, `role`.name as 角色, `power`.name as 权限
from `user`  
    left join (`user

< Read more >

[ Django文件下载 ]


views.py

from django.shortcuts import render
from django.http import StreamingHttpResponse
# Create your views here.

def index(request):
    return render(request, 'index.html')

def upload(request):
    res = StreamingHttpResponse(open('/home/ouzijun/ouzijun/Django_postgresSQL/django_p

< Read more >

[ Mysql慢查询日志配置 ]


慢查询日志配置

1. 开启功能

查询是否开启
SHOW VARIABLES LIKE ‘slow_query%’;

查询超时时间
SHOW VARIABLES LIKE ‘long_query_time%’;

方式一:配置文件开启(永久有效)

将 log_slow_queries 选项和 long_query_time 选项加入到配置文件的 [mysqld] 组中。格式如下:

[mysqld]
show_query_log=on/off  # 开启或关闭
log-slow-queries=dir/filename
long_query_time=n       # 忍耐时间
log_ou

< Read more >

[ django[middleware]中间件源码解析 ]


源码执行顺序

1. 通过嵌套装饰器wraps实现, 调用__call__魔术方法, 先执行request [321]里到外, 再执行response [123]外到里

from functools import wraps

def ex(get_response):
    @wraps(get_response)
    def inner(request):
        try:
            print('wraps-request')
            response = get_response(request)
        except 

< Read more >

[ Python魔法方法[属性]2 ]


1.getattr魔法方法 当读取这个属性不存在的时候, 你希望它做什么

class A:
    def __getattr__(self, name):
        print('getting')
        raise AttributeError

o = A()
print(o.test)

2.getattribute魔法方法 只要尝试读取属性都会被调用

class A:
    def __init__(self):
        self.data = 'abc'
        self.counter = 0

    def 

< Read more >

[ Python魔法方法[1] ]


1.获取new, init魔法方法 - 先使用__new__方法创建完成对象后, 再执行__init__方法

class A:
    def __new__(cls, x):
        print('__new__')
        return super().__new__(cls)

    def __init__(self, x):
        self.x = x
        print('__init__')
 o = A(1)

2.del魔法方法 - 在实例被释放的时候触发, 不可控 - 与python里的 del o是无关

< Read more >