2017-07-26 56 views
0

使用Python中的烧瓶框架,我的应用程序需要:如何构造这种中型烧瓶应用?

  1. 注册并登录的用户(带有一个SQLite或Postgres数据库)
  2. 访问特定的谷歌电子表格,登录用户拥有并输出该数据采用json格式。 我需要有我自己的授权&认证系统
我有很多的麻烦搞清楚如何连结构中的应用

- 我应该有什么样的目录和子目录?

我已经做了很多玩(约1个月的价值)。我正在使用虚拟环境,但不知道如何很好地测试我的代码。在一般情况下,我的代码运行,但我不知道他们是如何一起工作真的**我完全新的瓶**

构建应用程序

|应用

| - 。 ---run.py

| ---- config.py

| ----数据库

| --------- database.db

| ----应用

| --------- views.py

| --------- models.py

| - --------forms.py

| --------- extensions.py

| ----模板

| ------- - ...

| ----静态

| --------....

授权/认证我已经看过烧瓶登录,烧瓶验证,瓶的安全性。我了解总体思路,但不知道如何安全地实施认证系统的完整授权&。

app = Flask(__name__) 
app.config.from_object(config) 
login_manager = LoginManager() 
login_manager.init_app(app) 

def create_app(): 
    db.init_app() 
    db.app = app 
    db.create_all() 
    return app 

@app.route('/') 
def index(): 
    #needs to render the homepage template 

@app.route('/signup', methods = ['GET', 'POST']) 
def register(): 
    form = SignupForm() 
    if request.method == 'GET': 
     return render_template('signup.html', form=form) 
    elif request.method == 'POST': 
     if form.validate_on_submit(): 
      if User.query.filter_by(email=form.email.data).first(): 
       return "email exists" 
      else: 
       newuser = User(form.email.data, form.password.data) 
       db.session.add(newuser) 
       db.session.commit() 
       login_user(newuser) 

      return "New User created" 
    else: 
     return "form didn't validate" 

    return "Signup" 

@app.route('/login', methods = ['GET', 'POST']) 
def login(): 
    form = SignupForm() 

    if request.method == 'GET': 
     return render_template('login.html', form=form) 
    elif request.method == 'POST': 
     if form.validate_on_submit(): 
      user = User.query.filter_by(email=form.email.data).first() 
      if user: 
       if user.password == form.password.data: 
        login_user(user) 
        return "you are logged in" 
       else: 
        return "wrong password" 
      else: 
       return "user doesnt exist" 
     else: 
      return "form did not validate" 

@login_manager.user_loader 
def load_user(email): 
    return User.query.filter_by(email = email).first() 

@app.route('/protected') 
@login_required 
def protected(): 
    return "protected area for logged in users only" 

if __name__ == '__main__': 
    #app.create_app() 
    app.run(port=5000, host='localhost')` 

from flask_security import Security, SQLAlchemyUserDatastore, UserMixin, RoleMixin, login_required 
import os 

# Create app 
app = Flask(__name__) 
#app.config['DEBUG'] = True 
app.config['SECRET_KEY'] = '' 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////' 
app.config['SECURITY_PASSWORD_HASH'] = 'sha512_crypt' 
app.config['SECURITY_PASSWORD_SALT'] = str(os.urandom(24)) 
# Create database connection object 
db = SQLAlchemy(app) 

# Define models 
roles_users = db.Table('roles_users', 
    db.Column('user_id', db.Integer(), db.ForeignKey('user.id')), 
    db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))) 

class Role(db.Model, RoleMixin): 
    id = db.Column(db.Integer(), primary_key=True) 
    name = db.Column(db.String(80), unique=True) 
    description = db.Column(db.String(255)) 

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(255), unique=True) 
    password = db.Column(db.String(255)) 
    active = db.Column(db.Boolean()) 
    confirmed_at = db.Column(db.DateTime()) 
    roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) 


user_datastore = SQLAlchemyUserDatastore(db, User, Role) 
security = Security(app, user_datastore) 

# Create a user to test with 
@app.before_first_request 
def create_user(): 
    db.create_all() 
    user_datastore.create_user(email='', password='') 
    db.session.commit() 

@app.route('/') 
@login_required 
def home(): 
    #password = encrypt_password('mypass') 
    #print verify_and_update_password('mypass', password) 
    return "hello" 

if __name__ == '__main__': 
    app.run(debug=True, use_reloader=False) 

**我会很感激的任何指导**

回答

0

你们大家,我理解了它&我的应用程序正在好:)我正在使用蓝图&应用程序工厂模式。

APP 
|_runserver.py 
|_/app 
|---__init__.py 
|---config.py 
|---extensions.py 
|---forms.py 
|---models.py 
|---/login_dashboard #blueprint 
|------__init__.py 
|------views.py 
|------/templates 
|---------base.html 
      . 
      . 
|------/static 
|-----------/css 
       . 
       . 
|-----------/js 
       . 
       . 
|-----------/img 
       . 
       . 
0

项目结构:
如果你打算建立一个大瓶的应用程序,你应该考虑将功能分解为蓝图。
官方瓶文件对如何构建大型应用教程: http://flask.pocoo.org/docs/0.12/patterns/packages/

而且,看看在漫游指南组织项目的。它有一些非常好的点:http://python-guide-pt-br.readthedocs.io/en/latest/writing/structure/

如果你设计一个REST API考虑使用瓶的RESTful(这也与蓝图很好地工作)

+0

感谢您的快速反馈!我已经阅读了这些文档,只是很难整理出我需要哪些视图/路线以及哪些不需要。 – smundlay

+0

开始寻找RESTful,这太棒了!谢谢 – smundlay