给Python初学者的技巧
python challenge 介绍
Python Challenge是一个过关式的解谜站点,使用的是经典在线解谜站点Not Pr0n的模式:根据提示找出下一关的网页地址。和Not Pr0n不同的是,在每一关里你都需要编写程序来寻找答案。虽然这个解谜站点的名字叫做Python Challenge,但事实上你可以使用任意一种程序语言(除了少数一两关可能会用到点Python的知识),Python Challenge的创始人是Nadav Samet。
Python流行指数
FLASK开源项目--派生吧博客推介之五
FLASK开源项目--派生吧博客推介之四
FLASK开源项目--派生吧博客推介之三
这一部分主要对博客的源代码进行就解析,会分三次完成。首先看看代码主要有config.py,model.py,views.py,myapp.py这四个文件。
- config.py
# -*- coding: utf-8 -*- # configuration page num 每页的文章数 PER_PAGE = 10 # configuration mysql SQLALCHEMY_DATABASE_URI = "mysql://%s:%s@%s/%s"%('root','root','127.0.0.1','test')# 密钥SECRET_KEY = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
# 管理界面的用户名和密码 USERNAME = 'admin' PASSWORD = 'admin'# 图片上传路径UPLOAD_FOLDER = '/static/upload/'
#允许的图片类型 ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
配置文件里面主要设置了每页的文章数,数据库的相关信息:用户名、密码、地址、数据库名称,密钥,管理页面的用户名和密码,图片上传路径,允许的图片类型。
- myapp.py
这里面的代码比较简单,主要是导入相应的模块,app运行的端口以及debug模式:
from flask import Flask app = Flask(__name__) app.config.from_object('config') from views import * if __name__ == '__main__': app.run(host='0.0.0.0', debug=True)
flask开源项目--派生吧博客推介之二
上一部分介绍了博客整个结构,这一部分主要介绍templates与static两大文件夹里面的内容。
首先来看下templates 的内容:
这是整个博客的所有的页面:
- 404.html:错误页面,里面嵌入了公益寻人的js代码;
- about.html:个人说明页面
- category.html:分类目录的页面
- editpost.html:文章编辑的页面
- error.html:错误页面,里面会显示具体的错误信息,用于给调试使用;
- foot.html:所有页面的页脚部分
- head.html:所有页面的头的部分
- index.html:博客的首页
- layout.hml:页面的通用结构
- login.html:登录页面
- newpost.html:编写新文章的页面
- post.html:单页文章的页面
- search.html:搜索结果的页面
- sider.html:所有页面的侧边栏
- tag.html:标签页面
static文件夹内容:
css:包含页面所有的css
images:页面的所有使用的图片
js:页面所使用的js
kindeditor:富媒体文本编辑器的代码地址
upload:博客上传的图片的文件夹
这是这两大文件夹里面的内容,下一部分针对所有源码就行解析!
flask开源项目--派生吧博客推介之一
项目简介:
代码地址:https://github.com/sixu05202004/flaskblog
项目是用于简单的个人博客,前端界面主要是拷贝了wordpress的主题:NeoEase
项目使用的技术与插件:
- flask_sqlalchemy:是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展。 它致力于简化在 Flask 中 SQLAlchemy 的 使用,提供了有用的默认值和额外的助手来更简单地完成日常任务。
- flask_cache:缓存插件,可以用于提高网页的访问速度
- Bootstrap:Twitter的著名的CSS/HTML框架
- kindeditor:富文本编辑器
代码结构:
templates里面包含了很多网页模板:首页,文章页,标签页,分类页,搜索页等等,views.py包含很多的试图函数,config.py里面提供了一些基本的配置,model.py提供了基本的数据模型以及一些数据查询和处理的函数。
下一部分将会对源代码进行解析。
使用 gdb 调试 Python 进程
有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受 请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb这个神器了。 准备 1. 确认你的gdb版本是>=7,gdb从版本7开始支持对Python的debug。 (ref)
2.确认gdb连接的Python是所要debug的Python,否则请重新编译gdb。
方法: $ gdb (gdb) python >import sys >print sys.version >end 2.4.3 (#1, Sep 21 2011, 19:55:41)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] 在一些追求稳定的发行版(例如CentOS),Python的版本会较低,这时都会自己编译一个Python使用。而从源里安装的gdb会连接源里 Python的版本。例如在CentOS 5.4,源里的Python是2.4.3,从源安装的gdb也会连接到Python 2.4.3。 编译时注意,要把自己编译的Python路径加到PATH环境变量里,这样gdb configure的时候才会找到新版Python并连接。
3.下载libpython.py
如何Debug 假设要debug的进程号为1000 $ gdb -p 1000 使用此命令即可使gdb附加到进程。
载入libpython脚本 如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此 脚本是扩展gdb的,不是我们需要debug的脚本)。
$ gdb --python /path/to/libpython.py -p 1000 如果安装的是GNU的gdb,就需要打开gdb后手动载入libpython.py脚本 (gdb) python >import sys >sys.path.insert(0, '/path/to/libpython.py') >import libpython >end (gdb) 这时就可以使用py-bt命令打印当前线程的Python traceback了
libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。 一点经验 在gdb可以使用generate-core-file命令生成一个coredump文件。之后可以用gdb –core来打开coredump文件进行debug。避免一直attach住进程,可以快速重启恢复服务 gdb-heap是gdb的一个扩展。可以打印Python的内存使用情况
参考资料 DebuggingWithGdb EasierPythonDebugging Debugging with gdb (gdb documentation)