最近写了一个单点登录系统,这里做一些总结.
github地址:(欢迎来star一发^_^)
https://github.com/calmkart/Django-sso-server
继续阅读“Django sso server(一个用户友好的的单点登录系统)”
最近写了一个单点登录系统,这里做一些总结.
github地址:(欢迎来star一发^_^)
https://github.com/calmkart/Django-sso-server
继续阅读“Django sso server(一个用户友好的的单点登录系统)”
一点关于django类视图装饰器的小笔记。
django类视图是很常用的,对于传统的函数视图来说,装饰器可以直接装饰函数,但类视图,装饰器无法直接装饰类方法。
比较了几种常见的解决方法,个人觉得比较优雅的解决方法如下:
from django.shortcuts import render from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.views.generic import View @method_decorator(csrf_exempt, name="dispatch") class login(View): @method_decorator(auth_login) def get(self, request, username): #....func... return render(request, 'login.html', {"displayName":username, "admin_flag":admin_flag})
默认的django-admin中用户的models权限只有三个,分别是(Can change, Can add, Can delete),显然的,对于绝大部分crud工程师(^_^)而言,一眼看过去就少了些什么,没错,少了很关键的Can view权限.
当然django-admin的用户权限是可以自定义的,需要改permission的meta,这里不细述,发现一个简单好用的django app,可以直接添加Can view权限,美滋滋.
最终效果如下
继续阅读“为django-admin的userpermission添加read only(can view)权限”
通过一点细微代码的修改,将某系统首页载入时间缩短了10倍有余.
继续阅读“记一次立竿见影的性能优化”
salt的webui,官方的是halite,但已经被放弃了,不维护很久了
尝试过其他几个star比较的开源实现,比如saltpad,但要么就是bug满天飞,要么就是技能栈不符难以二次开发
最后发现了一个开源实现叫saltshaker的不错,最终效果如下
继续阅读“saltshaker–一个salt的webui”
最近有些django定时任务要跑,又懒的做异步celery worker tasks了,就是普通的同步任务,用的django crontab,其中django用的是gunicorn->nginx的部署方式。但几天下来,发现任务总是执行到一半就停了,排错发现一个偶尔会出现的坑
...
在使用supervisor/gosuv等进程控制程序控制django/flask进程时,常常会出现一个"BUG"------输入supervisor restart {app}/gosuv stop/start {app}后,经常会出现django/flask重启失败,因为端口已占用的错误。
这里我们常常想到,先把端口关掉不就可以了?经常在代码中加入如下命令:(如果程序是django或者flask,占用的端口是82端口)
import subprocess import os pid = os.popen("lsof -i:82|grep python|awk '{print $2}'").read() if len(pid): subprocess.check_output("kill -9 "+str(int(pid)), shell=True) #注意,这里一定要用subprocess库来kill进程。用os.system运行kill -9或os.kill()都会导致新进程产生
这样虽然可行,但是比较麻烦。其实占用端口的原因是flask/django服务器自动reload造成的,只需要在supervisor/gosuv的启动指令里,加上--noreload参数就不会产生这个"BUG"了,举例如下:
#原来启动指令 python manage.py runserver 0.0.0.0:82 #更新启动指令 python manage.py runserver 0.0.0.0:82 --noreload
搞定
需要实现这样的需求,对于以个django app,需要对其中的一些restful api做IP访问限制,这样实现起来最方便的是在middleware中写逻辑。
关于django中间件的说明:
http://usyiyi.cn/translate/Django_111/topics/http/middleware.html
http://python.usyiyi.cn/translate/django_182/topics/http/middleware.html
继续阅读“django使用middleware实现views的访问限制”