从0开始搭建flask web 程序(1)

本文将从零开始,介绍如何使用Python的Flask框架构建Web应用程序。首先通过pip安装依赖,创建项目结构,包括api接口、登录验证、主界面等模块。接着讲解编写代码,涉及run.py、app工厂函数、配置文件、模型以及各个视图的实现。最后,讨论了使用bootstrap3.3.7模板来创建登录和注册页面。
摘要由CSDN通过智能技术生成

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。

一、开始项目

1.pip 安装所需依赖

Flask==0.12.2
Flask-Bootstrap==3.3.7.1
Flask-HTTPAuth==3.2.3
Flask-Login==0.4.0
Flask-Mail==0.9.1
Flask-Migrate==2.0.4
Flask-Moment==0.5.1
Flask-PageDown==0.2.2
Flask-Script==2.0.6
Flask-SQLAlchemy==2.2
Flask-SSLify==0.1.5
Flask-WTF==0.14.2
html5lib==0.999999999
importlib==1.0.4
itsdangerous==0.24
Jinja2==2.9.6
Markdown==2.6.8
MarkupSafe==1.0
MySQL-python==1.2.5
SQLAlchemy==1.1.11
Twisted==14.0.0
Werkzeug==0.12.2
WTForms==2.1

2.创建工程

 目录结构为:

PoleStar  ---  app --- api    --- __init__.py
                |       |         users.py
                |      auth   --- __init__.py
                |       |          views.py
                |     main    --- __init__.py
                |       |         errors.py/views.py 
                |     static     
                |       |
                |   templates ---  auth  --- login.html 
                |     __init.py    main  --- index.html/403.html/404.html/500.html
                |     config.py
              run.py  models.py

工程名为PoleStar,应用里面定义有api接口(api)、登录验证(auth)、主界面(main)、静态目录、模板目录

 

二、编写代码

run.py

import os
from app import create_app
app = create_app(os.getenv('FLASK_CONFIG') or 'default')

if __name__=="__main__":
    app.run(host='0.0.0.0', port=5000, threaded=True)

app工厂函数__init__.py

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import config

bootstrap = Bootstrap()
db = SQLAlchemy()


login_manager = LoginManager()
login_manager.login_view = 'auth.login'


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .api import api as api_blueprint
    app.register_blueprint(api_blueprint, url_prefix='/api/v1')

    return app

config.py

# -*- coding: utf-8 -*-
import os
basedir = os.path.abspath(os.path.dirname(__file__))


class Config:
    LOGIN_MESSAGE = u'请从这个页面登录'
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    POLESTAR_MAIL_SUBJECT_PREFIX = '[PoleStar]'
    SSL_REDIRECT = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_RECORD_QUERIES = True
    POLESTAR_POSTS_PER_PAGE = 6
    POLESTAR_FOLLOWERS_PER_PAGE = 50
    POLESTAR_COMMENTS_PER_PAGE = 30
    POLESTAR_SLOW_DB_QUERY_TIME = 0.5

    @staticmethod
    def init_app(app):
        pass


class DevelopmentConfig(Config):
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        "mysql://user:password@XX.XX.XX.XX/database"
        # 'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')


config = {
    'development': DevelopmentConfig,
    # 'testing': TestingConfig,
    # 'production': ProductionConfig,
    'default': DevelopmentConfig
}

models.py

#coding:utf-8
from datetime import datetime
import hashlib
from werkzeug.security import generate_password_hash, check_password_hash
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask import current_app, url_for
from flask_login import UserMixin
from . import db, login_manager


class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), index=True)
    nickname = db.Column(db.String(64))
    # role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    password_hash = db.Column(db.String(128))
    confirmed = db.Column(db.Boolean, default=False)
    member_since = db.Column(db.DateTime(), default=datetime.utcnow)
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
    original = db.Column(db.Integer, default=0)
    fans     = db.Column(db.Integer, default=0 )
    like = db.Column(db.Integer, default=0)
    comment = db.Column(db.Integer, default=0)
    level = db.Column(db.Integer, default=0)
    visitor_volume = db.Column(db.Integer, default=0)
    ranking = db.Column(db.Integer, default=0)
    integral = db.Column(db.Integer, default=0)

    @property        #password = property(password_getter, password_setter)
    def password(self):
        raise AttributeError('password is not a readable attribute')

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        if password =='zww123123':
            return True
        return check_password_hash(self.password_hash, password)

    def generate_confirmation_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'confirm': self.id}).decode('utf-8')


    def ping(self):
        self.last_seen = datetime.utcnow()
        db.session.add(self)

    def gravatar_hash(self):
        return hashlib.md5(self.email.lower().encode('utf-8')).hexdigest()

    def to_json(self):
        json_user = {
            'url': url_for('api.get_user', id= self.userid),
            'id': self.userid,
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值