1、bootstrap代码片断:
假如你没有艺术细胞,偷懒的要领就是到这上面去找,比方登录框界面等。
侧边栏选用:http://www.designerslib.com/b…提到的http://bootsnipp.com/fullscre…。
其他一些资本:
w3schools-howto
一个比较炫的html模板(虽然末了没有采纳)
bootstrap主题
2、DIV的CSS height:100%无效的处理办法:
在css当中增加上:
html, body{ margin:0; height:100%; }
3、Alembic migration失利,Sqlite lack of ALTER support处理办法:
在env.py中设置render_as_batch=True
context.configure(
connection=connection,
target_metadata=target_metadata,
render_as_batch=True
)
4、markdown扩大:
http://pythonhosted.org/Markd…
比较有效的
Table of Contents(toc)、
CodeHilite(代码高亮)、
Meta-Data(文件前面能够增加元数据,比方题目,作者等)、
New Line to Break(换行即新行,而不是像原生markdown那样得换两行)、
Tables(表格插件)
5、关于Flask的:
Flask request,g,session的完成道理
深切 Flask 源码明白 Context
Flask Session超时设置
默许情况下,flask session在你封闭浏览器的时刻失效。你能够经由过程设置permanent session来转变这一行动。
from datetime import timedelta
from flask import session, app
@app.before_request
def make_session_permanent():
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=30)
默许情况下,permanent_session_lifetime是31天。
6、关于SQLAlchemy:
SQLAlchemy 运用履历
SqlAlchemy query many-to-many relationship
class Restaurant(db.Model):
...
dishes = db.relationship('Dish', secondary=restaurant_dish,
backref=db.backref('restaurants'))
然后检索一切的dishes for a restaurant, you can do:
x = Dish.query.filter(Dish.restaurants.any(name=name)).all()
发生相似以下SQL语句:
SELECT dish.*
FROM dish
WHERE
EXISTS (
SELECT 1
FROM restaurant_dish
WHERE
dish.id = restaurant_dish.dish_id
AND EXISTS (
SELECT 1
FROM restaurant
WHERE
restaurant_dish.restaurant_id = restaurant.id
AND restaurant.name = :name
)
)
7、处理轮回import的题目思绪
1.耽误导入(lazy import)
即把import语句写在要领或函数内里,将它的作用域限定在部分。
这类要领的瑕玷就是会有机能题目。
2.将from xxx import yyy改成import xxx;xxx.yyy来访问的情势
3.构造代码
涌现轮回import的题目每每意味着代码的规划有题目,能够兼并或许星散合作资本。兼并的话就是都写到一个文件内里去。星散的话就是把须要import的资本提取到一个第三方文件去。总之就是 将轮回变成单向。
详细处理计划后续文章再贴代码
8、关于Python的一些:
Good logging practice in Python
How do I check if a variable exists?
To check the existence of a local variable:
if 'myVar' in locals():
# myVar exists.
To check the existence of a global variable:
if 'myVar' in globals():
# myVar exists.
To check if an object has an attribute:
if hasattr(obj, 'attr_name'):
# obj.attr_name exists.
if('attr_name' in dir(obj)):
pass
另有一个不是很文雅地计划,经由过程捕捉非常的体式格局:
try:
myVar
except NameError:
myVar = None
# Now you're free to use myVar without Python complaining.
9、关于Git与Github
How do I delete a Git branch with TortoiseGit
为何给GIT库打TAG不成功
项目放在github,是否是经常被辨认为javascript项目?知乎这篇问答给出了答案。
题目缘由:
github 是依据项目里文件数量最多的文件范例,辨认项目范例.
处理办法:
项目根目录增加 .gitattributes
文件, 内容以下 :
*.js linguist-language=python
作用: 把项目里的 .js 文件, 辨认成 python 言语.
10、关于IDE的:
Indexing excluded directories in PyCharm
pycharm convert tabs to spaces automatically
11、关于Celery的:
periodic task for celery sent but not executed
这个因为我没仔细看官方文档,搞了良久。Celery的周期性使命scheduler须要设置beat和运转beat历程,然则仅仅运转beat历程能够吗?不可!我就是这里被坑了。还得同时运转一个worker。也就是说beat和worker都须要经由过程命令行运转。关于周期性使命beat缺一不可。其他使命可仅运转worker。
12、在supervisor或gunicorn设置环境变量
假如采纳gunicorn命令行的情势:-e选项
gunicorn -w 4 -b 127.0.0.1:4000 -k gevent -e aliyun_api_key=value,SECRET_KEY=mysecretkey app:app
假如采纳gunicorn.conf.py文件的情势:raw_env
import multiprocessing
bind = "127.0.0.1:4000"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class='gevent'
proc_name = "mdwiki"
user = "nginx"
chdir='/opt/mdwiki'
#daemon=False
#group = "nginx"
loglevel = "info"
#errorlog = "/home/myproject/log/gunicorn.log"
#accesslog=
raw_env = [
'aliyun_api_key=value',
'aliyun_secret_key=value',
'MAIL_PASSWORD=value',
'SECRET_KEY=mysecretkey',
]
#ssl
#keyfile=
#certfile=
#ca_certs=
假如采纳supervisor设置环境变量
[program:mdwiki]
environment=SECRET_KEY=value,aliyun_api_key=value,aliyun_secret_key=value,MAIL_PASSWORD=value
command=/usr/bin/gunicorn -n mdwiki -w 4 -b 127.0.0.1:4000 -k gevent app:app
directory=/opt/mdwiki
user=nginx
autostart=true
autorestart=true
redirect_stderr=true