pip freeze > requirements.txt 将所有的依赖装入这个。
该命令会创建一个文档为requirements.txt,并将当前环境上所有的依赖包包含在当前的环境上。
待脚本写完之后,在python console写入命令就好。
再使用db.createall()方法可以达到在数据库里创建一个数据库
代码详情见附件在这里插入代码片from flask import Flask, request, jsonify
from flask_restful import Resource, Api
from flask_sqlalchemy import SQLAlchemy
from flask_jwt_extended import (
JWTManager, jwt_required, create_access_token,
get_jwt_identity
)
from flask_jwt_extended import jwt_manager
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from jenkinsapi.jenkins import Jenkins
app = Flask(name)
api = Api(app)
jwt = JWTManager(app)
#此为轻量级的数据库,不适应于大量的数据库
#app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘sqlite:tmp/test.db’
#使用自己本地的mysql
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘mysql+pymysql://root:123456@localhost:3306/python14’
#token管理 。#密码改个名字,不然会被不怀好意的人窃取
app.config[‘JWT_SECRET_KEY’] = ‘localhost’ # Change this
done: 输出中文json
app.config[“JSON_AS_ASCII”] = False
db = SQLAlchemy(app)
jenkins=Jenkins(
‘http://localhost:8080’,
username=‘x’,
password=‘11bc63a77c1808e57f2dfeaafef3fc7f31’ )
class User(db.Model):
tablename = “userxwl”
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
class Testcase(db.Model):
tablename = “xwl_testcase”
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
description = db.Column(db.String(500), unique=False, nullable=False)
data = db.Column(db.String(1024), unique=False, nullable=False)
def __repr__(self):
return '<TestCase %r>' % self.name
class TestCaseApi(Resource):
#有如下装饰器,就对一些操作有了要求,必须得有token才能进行操作
@jwt_required
def get(self):
r=[]
res={}
for t in Testcase.query.all():
res[‘id’]=t.id
res[‘name’]=t.name
res[‘description’]=t.description
res[‘data’]=t.data
r.append(res)
#查询所有的case出来
#return Testcase.query.all()
return r
#return {‘id’:t.id,‘name’:t.name}
@jwt_required
def post(self):
t = Testcase(
name = request.json['name'],
description = request.json['description'],
data = request.json['data']
)
# # # 新增数据
db.session.add(t)
db.session.commit()
return {
'msg': 'ok'
}
@jwt_required
def put(self):
pass
@jwt_required
def delete(self):
pass
class Hello(Resource):
def get(self):
return {‘hello’: ‘world’}
class LoginApi(Resource):
def get(self):
return "hello world"
def post(self):
#todo:查询数据库
username=request.json.get('username',None)
print(123456)
print(username)
#通常密码不能原文存储
password=request.json.get('password',None)
print('--------')
print(password)
user=User.query.filter_by(username=username,password=password).first()
print(789)
print(user)
print(type(user))
if user is None:
return jsonify(
errcode=1,
errmsg='用户名或者密码不对'
)
else:
return {
'errcode':0,
'errmsg':'ok',
'username':user.username,
'token': create_access_token(identity=user.username)
}
class TaskApi(Resource):
#get里面只是一个获取,真正的执行是在post里面。这是task任务属性所决定的。
def get(self):
pass
@jwt_required
def post(self):
#todo:用例获取
testcases=request.json.get('testcases',None)
jenkins['testcase'].invoke(securitytoken='11bc63a77c1808e57f2dfeaafef3fc7f31',
build_params={
'testcases':testcases
})
#todo:调度Jenkins
#todo:异步处理
pass
api.add_resource(TestCaseApi, ‘/testcase’)
api.add_resource(LoginApi, ‘/login’)
api.add_resource(TaskApi, ‘/task’)
api.add_resource(Hello, ‘/’)
if name == ‘main’:
app.run(debug=True)