def user(username, page=1): user = User.query.filter_by(username=username).first_or_404() userid = user.id posts = Post.query.order_by(Post.timestamp.desc()).filter_by( user_id=userid).paginate(page, 4, False) index_all(current_app) return render_template('user/user.html', user=user, posts=posts)
def search_pools(self): data = request.get_json() search_query = data.get('search') index_all(app) try: search_result = Pool.query.whoosh_search(search_query).all() except: return jsonify({'message': 'No match found', 'status': 404}) hold = [] keys = [ "pool_id", "pool_name", "pool_address", "location_lat", "location_long", "opening_time", "closing_time", "size", "depth", "description", "weekday_fee", "weekend_fee", "availale", "pool_thumbnail" ] for result in search_result: info = [ result.pool_id, result.pool_name, result.pool_address, result.location_lat, result.location_long, result.opening_time, result.closing_time, result.size, result.depth, result.description, result.weekday_fee, result.weekend_fee, result.available, result.pool_thumbnail ] hold.append(dict(zip(keys, info))) return jsonify({'data': hold, 'status': 200})
def search_venues(): index_all(app) search_term = request.form.get('search_term', '') result = Venue.query.whoosh_search(search_term).all() count = len(result) return render_template('pages/search_venues.html', results=result, search_term=request.form.get('search_term', ''), count=count)
def home(): # Debug: first = Good.query.order_by(Good.id).first() # Debug: print(first) ''' The view function to show home page. :return: a html page of home in which page show the items in database. ''' # 得到分页参数 try: page = int(request.args.get('page', 1)) except ValueError: page = 1 # 设置每页显示的物品数量 per_page = 6 # 实例化搜索表单 form = SearchItems() # 计算页偏移 offset = (page - 1) * per_page # 处理提交后的表单 if form.validate_on_submit(): # 建立goods表的索引 flask_whooshalchemyplus.index_all(current_app) # 获取搜索关键字,并使用关键字查询商品 key = form.search.data show_goods = Good.query.whoosh_search(key, or_=True)\ .limit(per_page).offset(offset) # 计算查询得到的表项的总数 total = Good.query.whoosh_search(key, or_=True).count() # 得到分页对象 pagination = Pagination(page=page, total=total, per_page=per_page, search=True, found=total, record_name='goods', css_framework='bootstrap3') else: total = len(Good.query.all()) show_goods = Good.query.limit(per_page).offset(offset) pagination = Pagination(page=page, total=total, per_page=per_page, search=False, record_name='goods', css_framework='bootstrap3') # Debug: page = request.args.get(get_page_parameter(), type=int, default=1) # print(total) # print(pagination.links) # 返回渲染后的html return render_template('goods/home.html', form=form, page=page, per_page=per_page, show_goods=show_goods, pagination=pagination)
def create_app(): '''工厂函数,创建APP实例''' setupLogging(config[APP_ENV].LOGGING_LEVEL) app = Flask(__name__) app.config.from_object(config[APP_ENV]) CORS(app, resources=r'/*') db.init_app(app) with app.app_context(): index_all(app) # flask_whooshalchemyplus.init_app(app) from app.api_v1 import api app.register_blueprint(api, url_prefix='/api/v1.0') return app
def index(page=1): if current_user.is_anonymous: posts = Post.query.order_by(Post.timestamp.desc()).paginate( page, 4, False) recent, top_tags = sidebar_data() index_all(current_app) return render_template('base/index.html', posts=posts, recent=recent, top_tags=top_tags) else: role = UserRole.query.filter_by(user_id=current_user.id).first() posts = Post.query.order_by(Post.timestamp.desc()).paginate( page, 4, False) recent, top_tags = sidebar_data() index_all(current_app) return render_template('base/index.html', posts=posts, recent=recent, top_tags=top_tags, role=role)
from datetime import datetime from flaskblog import db, login_manager from flask_login import UserMixin import flask_whooshalchemyplus as wa from flask_whooshalchemyplus import index_all from flaskblog import app index_all(app) @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) image_file = db.Column(db.String(20), nullable=False, default='default.jpg') password = db.Column(db.String(60), nullable=False) posts = db.relationship('Post', backref='author', lazy=True) def __repr__(self): return f"User('{self.username}', '{self.email}', '{self.image_file}')" class Post(db.Model): __searchable__ = ['title', 'content']
kwargs = { 'methods': frozenset(['GET']), 'allow_functions': True, 'results_per_page': 10 } # create API endpoint for each model for model in model_objects: manager.create_api(model, **kwargs) for model in model_objects: whooshalchemy.whoosh_index(app, model) with app.app_context(): whooshalchemy.init_app(app) whooshalchemy.index_all(app) # unpaginated API endpoints @app.route('/api/unpaginated/parks') def unpaginated_parks(): parks_list = [] parks = db.session.query(Park).all() for park in parks: parks_dict = {} parks_dict['id'] = park.id parks_dict['name'] = park.name parks_dict['website'] = park.website parks_dict['city_id'] = park.city_id parks_dict['address'] = park.address
def search_index(): """文章搜索首页""" #flask_whooshalchemyplus.index_one_model(Essay) 0.7.5版本 flask_whooshalchemyplus.index_all(app) # 0.7.4 return render_template('html/search_index.html')
def build_index(): '''Create whoosh index.''' import flask_whooshalchemyplus as whooshalchemy if os.path.exists(app.config['WHOOSH_BASE']): shutil.rmtree(app.config['WHOOSH_BASE']) whooshalchemy.index_all(app)
def search(): index_all(current_app) #建立查找索引 if not g.search_form.validate_on_submit(): return redirect(url_for('.blog')) return redirect(url_for('.search_results', query=g.search_form.search.data))
def whoosh_index_all(): """Index searcheable models for Whoosh """ index_all(app)
# -*- coding: utf-8 -*- # 本部分完成项目的初始化 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_script import Manager from flask_login import LoginManager from flask_migrate import Migrate, MigrateCommand import flask_whooshalchemyplus app = Flask(__name__) # 启动app app.config.from_object('config') # 加载设置 db = SQLAlchemy(app) # 链接数据库 manager = Manager(app) lm = LoginManager() # 启动login第三方模块 lm.session_protection = 'basic' lm.login_view = 'login' # 登记login的html文件 lm.init_app(app) migrate = Migrate(app, db) manager.add_command('db', MigrateCommand) flask_whooshalchemyplus.init_app(app) flask_whooshalchemyplus.index_all(app) from app import views # 加载主逻辑views