Flask basic models.py和controllers.py在烧瓶中的外观如何?
basic models.py和controllers.py看起来怎么样,它的基本结构是什么?还是模板?Flask basic models.py和controllers.py在烧瓶中的外观如何?,flask,flask-sqlalchemy,Flask,Flask Sqlalchemy,basic models.py和controllers.py看起来怎么样,它的基本结构是什么?还是模板?models.py from flask_sqlalchemy import SQLAlchemy from app import db from werkzeug.security import generate_password_hash, check_password_hash class User(db.Model): __tablename__ = 'users'
models.py
from flask_sqlalchemy import SQLAlchemy
from app import db
from werkzeug.security import generate_password_hash, check_password_hash
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(255))
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password, password)
def to_dict(self):
return {
'id' : self.id,
'name': self.name,
'email': self.email,
}
def __repr__(self):
return "User<%d> %s" % (self.id, self.name)
from flask import Blueprint, request, session, jsonify
from sqlalchemy.exc import IntegrityError
from app import db
from .models import User
mod_user = Blueprint('user', __name__, url_prefix='/api')
@mod_user.route('/login', methods=['GET'])
def check_login():
if 'user_id' in session:
user = User.query.filter(User.id == session['user_id']).first()
return jsonify(success=True, user=user.to_dict())
return jsonify(success=False), 401
@mod_user.route('/login', methods=['POST'])
def login():
try:
email = request.form['email']
password = request.form['password']
except KeyError as e:
return jsonify(success=False, message="%s not sent in the request" % e.args), 400
user = User.query.filter(User.email == email).first()
if user is None or not user.check_password(password):
return jsonify(success=False, message="Invalid Credentials"), 400
session['user_id'] = user.id
return jsonify(success=True, user=user.to_dict())
@mod_user.route('/logout', methods=['POST'])
def logout():
session.pop('user_id')
return jsonify(success=True)
@mod_user.route('/register', methods=['POST'])
def create_user():
try:
name = request.form['name']
email = request.form['email']
password = request.form['password']
except KeyError as e:
return jsonify(success=False, message="%s not sent in the request" % e.args), 400
if '@' not in email:
return jsonify(success=False, message="Please enter a valid email"), 400
u = User(name, email, password)
db.session.add(u)
try:
db.session.commit()
except IntegrityError as e:
return jsonify(success=False, message="This email already exists"), 400
return jsonify(success=True)
或
从flask导入蓝图、请求、会话、jsonify
从应用程序导入数据库,需要\u auth
从。模型导入Todo
mod_todo=Blueprint('todo','u名称,url\u前缀='/api')
@mod_todo.route('/todo',methods=['POST'])
@需要授权
def create_todo():
title=请求。表单['title']
text=请求。表单['text']
颜色=请求。表单['color']
user\u id=会话['user\u id']
todo=todo(标题、文本、颜色、用户id)
db.session.add(todo)
db.session.commit()
返回jsonify(success=True,todo=todo.to_dict())
@mod_todo.route('/todo',methods=['GET'])
@需要授权
def get_all_todos():
user\u id=会话['user\u id']
todos=Todo.query.filter(Todo.user\u id==user\u id).all()
返回jsonify(success=True,todos=[todo.to\u dict()表示todos中的todo])
@mod_todo.route('/todo/',methods=['GET'])
@需要授权
def get_todo(id):
user\u id=会话['user\u id']
todo=todo.query.filter(todo.id==id,todo.user\u id==user\u id).first()
如果todo为无:
返回jsonify(success=False),404
其他:
返回jsonify(success=True,todo=todo.to_dict())
@mod_todo.route('/todo/',methods=['POST'])
@需要授权
def编辑任务(id):
user\u id=会话['user\u id']
todo=todo.query.filter(todo.id==id,todo.user\u id==user\u id).first()
如果todo为无:
返回jsonify(success=False),404
其他:
todo.title=request.form['title']
todo.text=request.form['text']
todo.color=request.form['color']
db.session.commit()
返回jsonify(success=True)
@mod_todo.route('/todo//done',methods=['POST'])
@需要授权
def标记_完成(id):
user\u id=会话['user\u id']
todo=todo.query.filter(todo.id==id,todo.user\u id==user\u id).first()
如果todo为无:
返回jsonify(success=False),404
其他:
todo.done=True
db.session.commit()
返回jsonify(success=True)
@mod_todo.route('/todo//delete',methods=['POST'])
@需要授权
def delete_todo(标识):
user\u id=会话['user\u id']
todo=todo.query.filter(todo.id==id,todo.user\u id==user\u id).first()
如果todo为无:
返回jsonify(success=False),404
其他:
db.session.delete(todo)
db.session.commit()
返回jsonify(success=True)
这里有一个例子:欢迎来到SO,谢谢你的回答。给你的答案加上描述会让读者明白。您的描述可以包含目录结构、对Blueprint的需求等。
from flask import Blueprint, request, session, jsonify
from sqlalchemy.exc import IntegrityError
from app import db
from .models import User
mod_user = Blueprint('user', __name__, url_prefix='/api')
@mod_user.route('/login', methods=['GET'])
def check_login():
if 'user_id' in session:
user = User.query.filter(User.id == session['user_id']).first()
return jsonify(success=True, user=user.to_dict())
return jsonify(success=False), 401
@mod_user.route('/login', methods=['POST'])
def login():
try:
email = request.form['email']
password = request.form['password']
except KeyError as e:
return jsonify(success=False, message="%s not sent in the request" % e.args), 400
user = User.query.filter(User.email == email).first()
if user is None or not user.check_password(password):
return jsonify(success=False, message="Invalid Credentials"), 400
session['user_id'] = user.id
return jsonify(success=True, user=user.to_dict())
@mod_user.route('/logout', methods=['POST'])
def logout():
session.pop('user_id')
return jsonify(success=True)
@mod_user.route('/register', methods=['POST'])
def create_user():
try:
name = request.form['name']
email = request.form['email']
password = request.form['password']
except KeyError as e:
return jsonify(success=False, message="%s not sent in the request" % e.args), 400
if '@' not in email:
return jsonify(success=False, message="Please enter a valid email"), 400
u = User(name, email, password)
db.session.add(u)
try:
db.session.commit()
except IntegrityError as e:
return jsonify(success=False, message="This email already exists"), 400
return jsonify(success=True)
from flask import Blueprint, request, session, jsonify
from app import db, requires_auth
from .models import Todo
mod_todo = Blueprint('todo', __name__, url_prefix='/api')
@mod_todo.route('/todo', methods=['POST'])
@requires_auth
def create_todo():
title = request.form['title']
text = request.form['text']
color = request.form['color']
user_id = session['user_id']
todo = Todo(title, text, color, user_id)
db.session.add(todo)
db.session.commit()
return jsonify(success=True, todo=todo.to_dict())
@mod_todo.route('/todo', methods=['GET'])
@requires_auth
def get_all_todos():
user_id = session['user_id']
todos = Todo.query.filter(Todo.user_id == user_id).all()
return jsonify(success=True, todos=[todo.to_dict() for todo in todos])
@mod_todo.route('/todo/<id>', methods=['GET'])
@requires_auth
def get_todo(id):
user_id = session['user_id']
todo = Todo.query.filter(Todo.id == id, Todo.user_id == user_id).first()
if todo is None:
return jsonify(success=False), 404
else:
return jsonify(success=True, todo=todo.to_dict())
@mod_todo.route('/todo/<id>', methods=['POST'])
@requires_auth
def edit_todo(id):
user_id = session['user_id']
todo = Todo.query.filter(Todo.id == id, Todo.user_id == user_id).first()
if todo is None:
return jsonify(success=False), 404
else:
todo.title = request.form['title']
todo.text = request.form['text']
todo.color = request.form['color']
db.session.commit()
return jsonify(success=True)
@mod_todo.route('/todo/<id>/done', methods=['POST'])
@requires_auth
def mark_done(id):
user_id = session['user_id']
todo = Todo.query.filter(Todo.id == id, Todo.user_id == user_id).first()
if todo is None:
return jsonify(success=False), 404
else:
todo.done = True
db.session.commit()
return jsonify(success=True)
@mod_todo.route('/todo/<id>/delete', methods=['POST'])
@requires_auth
def delete_todo(id):
user_id = session['user_id']
todo = Todo.query.filter(Todo.id == id, Todo.user_id == user_id).first()
if todo is None:
return jsonify(success=False), 404
else:
db.session.delete(todo)
db.session.commit()
return jsonify(success=True)