Tôi có một câu hỏi liên quan đến bản thiết kế. Tôi có một ứng dụng mà được cấu trúc như thế nàyBản thiết kế chi tiết sử dụng thích hợp
app
/run.py
/APP
/__init__.py
/VIEWS
/__init__.py
/general.py
/crud.py
này là mã http://pastebin.com/bsHsTGAP
run.py
from overwatch import app
app.run()
__init__.py
from flask import Flask, session, g, render_template, request, redirect, url_for, Response
import websiteconfig as config
from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
Permission, identity_changed, identity_loaded
app = Flask(__name__)
app.debug = config.DEBUG
app.secret_key = config.SECRET_KEY
principals = Principal(app)
principals._init_app(app)
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
@app.errorhandler(403)
def page_not_found(e):
session['redirected_from'] = request.url
return redirect(url_for('crud.login'))
# handle login failed
@app.errorhandler(401)
def page_not_found(e):
return Response('<p>Login failed</p>')
from overwatch.views import general
from overwatch.views import crud
app.register_blueprint(general.mod)
app.register_blueprint(crud.mod)
general.py
from flask import Blueprint, render_template, session, redirect, url_for, \
request, flash, g, Response, jsonify
from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
Permission, identity_changed, identity_loaded
from .. import principals
mod = Blueprint('general', __name__)
normal_role = RoleNeed('normal')
normal_permission = Permission(normal_role)
@mod.route('/')
@normal_permission.require(http_exception=403)
def index():
return "YOU'RE IN"
crud.py
from flask import Blueprint, render_template, session, redirect, url_for, \
request, flash, g, Response, jsonify, abort, Response
from mongokit import Connection, Document
from db import user_exists, email_exists, return_attribute, check_credentials
from forms import RegistrationForm, LoginForm
from .. import app
from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
Permission, identity_changed, identity_loaded
from general import normal_role, normal_permission
mod = Blueprint('crud', __name__)
@mod.route('/login/', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
error = None
if request.method == 'POST' and form.validate():
if check_credentials(form.username.data,form.password.data):
identity = Identity(form.username.data)
identity_changed.send(app, identity=identity)
return redirect(session['redirected_from'])
else:
return abort(401)
return render_template('login.html', form=form, error=error)
@app.route("/logout/")
def logout():
for key in ['identity.name', 'identity.auth_type', 'redirected_from']:
try:
del session[key]
except:
pass
return Response('<p>Logged out</p>')
@identity_loaded.connect_via(app)
def on_identity_loaded(sender, identity):
identity.provides.add(normal_role)
Thing là, tôi dường như được nhập khẩu rất nhiều thứ vào rất nhiều thứ. Ngay bây giờ nó hoạt động. nếu tôi đi đến trang chỉ mục, được xử lý bởi general.py blueprint và được bảo mật với normal_permission nó chuyển hướng đến/đăng nhập được xử lý bởi crud.py kế hoạch chi tiết và nếu đăng nhập chuyển hướng đến chỉ mục. Một lần nữa, ngay bây giờ nó ... hoạt động nhưng .. nó cũng cảm thấy thực sự dll bẩn và ô uế và .. bleac ... vì vậy không giống như một số mã tốt tôi đọc :)
Bất kỳ đề nghị được chào đón xin vui lòng. Nếu đây không phải là cách để giải quyết nó, tôi sẵn sàng học hỏi. Tôi không muốn có một số mã mà .. chỉ hoạt động.
Cảm ơn bạn đã dành thời gian đọc và có thể trả lời.
ps. nếu tôi dán quá nhiều mã ở đây hãy cho tôi biết và tôi sẽ chỉnh sửa nó.
có vẻ như rất nhiều thứ bạn nhập không được sử dụng, tại sao bạn không nhập vào từng mô-đun chỉ những gì bạn định sử dụng? (dù sao, nhập khẩu những thứ tương tự ở nhiều nơi không phải là vấn đề hiệu suất, vì nhập khẩu chỉ xảy ra một lần, nhưng nhập khẩu không sử dụng làm cho mã của bạn ít có thể đọc được) – MatToufoutu
Tôi nghĩ rằng bạn đang cố gắng hết sức. Coy và dán công việc. Hqvent đã làm sạch mọi thứ. Tôi đã được nhiều hơn về cách tôi cần phải từ .. Nhập khẩu ứng dụng trong crud.py để cập nhật danh tính thông qua identity_changed và nhiều hơn nữa dọc theo những dòng – pocorschi
Cách chính xác để truy cập các ứng dụng hiện tại từ trong một lần xem trong mô-đun khác là thông qua Đối tượng 'flask.current_app', là một proxy cho ứng dụng hiện tại. (Nếu đây là những gì bạn đang tìm kiếm, hãy cho tôi biết và tôi sẽ thêm nhận xét làm câu trả lời) – MatToufoutu