巡风xunfeng代码研究---新建Flask项目模板

 

 生成以下的Flask项目模板

 

 现所缺功能还是很多

如何完成以下的目录架构: 

1)在项目下面穿件 aider子目录,db子目录,views子目录,和其他功能模块目录(nascan,masscan,vulscan等),将static和templates目录移动到views目录下

 注意: views目录是package,因为新建package目录会生成__init__.py初始化文件

 

 

 下面就说说: 

 view目录下的代码说明: 

1) static目录放置html页面的css文件和js文件和img图形文件

2)  templates放置的是html页面文件

3)lib目录放置的是python文件,是模块文件,含: 数据库连接, excel使用,搜索逻辑,登录状态检查等模块脚本

4) __init__.py文件:

  app = Flask(__name__) 创建Flask实例

 同时使用FLask的config模块: Flask可以通过以下两步获取到常用变量的值

(1) app.config.from_object(类): 从类对象中获取各种

(2) app.config.get('DB')  --DB为类的属性

 

本例子中,我写了一个Config.py文件,里面定义了ProductConfig类和它的属性

class Config(object):
    ACCOUNT = 'admin'
    PASSWORD = 'xunfeng321'


class ProductionConfig(Config):
    DB = '127.0.0.1'
    PORT = 65521
    DBUSERNAME = 'scan'
    DBPASSWORD = '123456'
    DBNAME = 'xunfeng'

然后在创建FLask实例的初始文件__init__.py引用定义好的常用变量。已完成数据库的链接等等。

 

 

 


 下面的是本项目的核心代码:

视图的路由和核心算法:

View.py:

FLask的优秀算法就是路由算法很简洁易懂

 

@app.route('/filter')

核心算法分析请看这里———————— 

# 搜索页
@app.route('/filter')
@logincheck
def Search()

# 搜索结果页
@app.route('/')
@logincheck
def Main():

# 获取插件信息异步
@app.route('/getplugin', methods=['get', 'post'])
@logincheck
def Getplugin():

# 新增任务异步
@app.route('/addtask', methods=['get', 'post'])
@logincheck
def Addtask():

# 任务列表页面
@app.route('/task')
@logincheck
def Task():

# 复测任务异步
@app.route('/taskrecheck')
@logincheck
def Recheck():

# 任务详情页面
@app.route('/taskdetail')
@logincheck
def TaskDetail():

# 删除任务异步
@app.route('/deletetask', methods=['get', 'post'])
@logincheck
def DeleteTask():

# 下载excel报表异步
@app.route('/downloadxls', methods=['get', 'post'])
@logincheck
def DownloadXls():

# 插件列表页
@app.route('/plugin')
@logincheck
def Plugin():

# 新增插件异步
@app.route('/addplugin', methods=['get', 'post'])
@logincheck
def AddPlugin():

# 删除插件异步
@app.route('/deleteplugin', methods=['get', 'post'])
@logincheck
def DeletePlugin():

# 统计页面
@app.route('/analysis')
@logincheck
def Analysis():

# 配置页面
@app.route('/config')
@logincheck
def Config():

# 配置更新异步
@app.route('/updateconfig', methods=['get', 'post'])
@logincheck
def UpdateConfig():

# 拉取线上最新插件异步
@app.route('/pullupdate')
@logincheck
def PullUpdate():

# 检查本地已知的线上插件列表异步
@app.route('/checkupdate')
@logincheck
def CheckUpdate():

# 安装/下载插件异步
@app.route('/installplugin')
@logincheck
def installplugin():

 

 

登录,登出和异常

 


# 登录
@app.route('/login', methods=['get', 'post'])
def Login():
if request.method == 'GET':
return render_template('login.html')
else:
account = request.form.get('account')
password = request.form.get('password')
if account == app.config.get('ACCOUNT') and password == app.config.get('PASSWORD'):
session['login'] = 'loginsuccess'
return redirect(url_for('Search'))
else:
return redirect(url_for('Login'))


#
登出异步 @app.route('/loginout') @logincheck def LoginOut(): session['login'] = '' return redirect(url_for('Login')) @app.route('/404') def NotFound(): return render_template('404.html') @app.route('/500') def Error(): return render_template('500.html')

 

 

 

 

 

如何启动和查看view

 

 根目录下的Run.py文件就是启动Flask项目的入口文件。但是关启动这个还不行,因为这个是跟mongodb连接,所以要保证mongodb处于运行状态: 

start mongod.exe --port 65521 --dbpath Data --auth

同时这个巡风系统还有其他的服务模块: aider,nascan,vulscan等等。所以需要按顺序写一个启动脚本(linux下的是sh文件 ,windows下是bat文件),按顺序启动对应的服务。
start mongod.exe --port 65521 --dbpath Data --auth
start python Run.py
start python aider/Aider.py
start python nascan/NAScan.py
start python vulscan/VulScan.py

当然可以使用supervisorctl 工具(只针对linux下,不支持windows),启动对应的服务。 

 

 

其中Run.py

 

from views.View import app

if __name__ == '__main__':
    app.debug = True
    app.run(threaded=True, port=80,host='127.0.0.1')

就是定义好Flask实例同时 定义好应用启动的端口和IP,以及是否使用debug模式和支持多线程

flask使用threaded模式,可以支持并发访问

posted @ 2017-03-27 15:00  八月的男人  阅读(1323)  评论(0编辑  收藏  举报