def reset_password(): step = request.args.get('step', 1, type=int) if USER_RESET_PASSWORD_STEP not in session: if step not in (1, 2): return redirect(url_for('main.index')) session[USER_RESET_PASSWORD_STEP] = 1 elif session[USER_RESET_PASSWORD_STEP] != step: return redirect(url_for('user.register', step=session[USER_RESET_PASSWORD_STEP])) if request.method == 'GET': ResetPasswordForm() # generate csrf_token in cookie return render_template('user/reset_password.html') if step == 1: form = ResetPasswordForm() if form.validate(): session[USER_RESET_PASSWORD_MOBILE] = form.mobile.data session[USER_RESET_PASSWORD_STEP] = 2 return jsonify({'success': True}) else: return jsonify({'success': False, 'message': form.error2str()}) elif step == 2: if USER_RESET_PASSWORD_MOBILE not in session: session[USER_RESET_PASSWORD_STEP] = 1 return redirect(url_for('user.register', step=1)) form = ResetPasswordDetailForm() if form.validate(): user = form.update_password() session.pop(USER_RESET_PASSWORD_STEP) return jsonify({'success': True, 'user': {'username': user.username, 'mobile': user.mobile}}) return jsonify({'success': False, 'message': form.error2str()})
def vendors_confirm_data_table(): draw, start, length = data_table_params() vendors = Vendor.query.filter_by(confirmed=False, rejected=False).offset(start).limit(length) count = Vendor.query.filter_by(confirmed=False, rejected=False).count() data = {'draw': draw, 'recordsTotal': count, 'recordsFiltered': count, 'data': []} for vendor in vendors: data['data'].append({ 'id': vendor.id, 'name': vendor.name, 'address': vendor.address.precise_address(), 'email': vendor.email, 'license_limit': vendor.license_limit, 'mobile': vendor.mobile, 'telephone': vendor.telephone, 'agent_name': vendor.agent_name, 'agent_identity': vendor.agent_identity, 'agent_identity_front': url_for('static', filename=vendor.agent_identity_front), 'agent_identity_back': url_for('static', filename=vendor.agent_identity_back), 'license_image': url_for('static', filename=vendor.license_image) }) return jsonify(data)
def show_info(self, vendor): for attr in self.attributes: getattr(self, attr).data = getattr(vendor, attr) self.address.data = vendor.address.precise_address() for url in self.image_urls: setattr(self, url, url_for('static', filename=getattr(vendor, url)))
def distributors_revocation_data_table(): draw, start, length = data_table_params() revocations = DistributorRevocation.query.filter_by( pending=True).offset(start).limit(length) count = DistributorRevocation.query.filter_by(is_revoked=False).count() data = { 'draw': draw, 'recordsTotal': count, 'recordsFiltered': count, 'data': [] } for revocation in revocations: data['data'].append({ 'id': revocation.id, 'name': revocation.distributor.name, 'address': revocation.distributor.address.precise_address(), 'contact': revocation.distributor.contact, 'contact_telephone': revocation.distributor.contact_telephone, 'contact_mobile': revocation.distributor.contact_mobile, 'contract': url_for('static', filename=revocation.contract), 'vendor': revocation.distributor.vendor.name }) return jsonify(data)
def show_info(self): for attr in self.attributes: getattr(self, attr).data = getattr(current_user, attr) for attr in self.url_attributes: setattr(self, attr + '_url', url_for('static', filename=getattr(current_user, attr))) self.address.data = current_user.address.address self.area_cn_id.data = current_user.address.cn_id self.show_address()
def show_vendor_setting(self, vendor): self.telephone.data = vendor.telephone self.introduction.data = vendor.introduction # self.area_cn_id.data = vendor.address.cn_id self.contact.data = vendor.contact self.address.data = vendor.address.address self.mobile.data = vendor.mobile self.logo_url = url_for('static', filename=vendor.logo) self.show_address() self.email.data = vendor.email self.brand.data = vendor.brand
def vendors_confirm_data_table(): draw, start, length = data_table_params() vendors = Vendor.query.filter_by( confirmed=False, rejected=False).offset(start).limit(length) count = Vendor.query.filter_by(confirmed=False, rejected=False).count() data = { 'draw': draw, 'recordsTotal': count, 'recordsFiltered': count, 'data': [] } for vendor in vendors: data['data'].append({ 'id': vendor.id, 'name': vendor.name, 'address': vendor.address.precise_address(), 'email': vendor.email, 'license_limit': vendor.license_limit, 'mobile': vendor.mobile, 'telephone': vendor.telephone, 'agent_name': vendor.agent_name, 'agent_identity': vendor.agent_identity, 'agent_identity_front': url_for('static', filename=vendor.agent_identity_front), 'agent_identity_back': url_for('static', filename=vendor.agent_identity_back), 'license_image': url_for('static', filename=vendor.license_image) }) return jsonify(data)
def reset_password(): step = request.args.get('step', 1, type=int) if USER_RESET_PASSWORD_STEP not in session: if step not in (1, 2): return redirect(url_for('main.index')) session[USER_RESET_PASSWORD_STEP] = 1 elif session[USER_RESET_PASSWORD_STEP] != step: return redirect( url_for('user.register', step=session[USER_RESET_PASSWORD_STEP])) if request.method == 'GET': ResetPasswordForm() # generate csrf_token in cookie return render_template('user/reset_password.html') if step == 1: form = ResetPasswordForm() if form.validate(): session[USER_RESET_PASSWORD_MOBILE] = form.mobile.data session[USER_RESET_PASSWORD_STEP] = 2 return jsonify({'success': True}) else: return jsonify({'success': False, 'message': form.error2str()}) elif step == 2: if USER_RESET_PASSWORD_MOBILE not in session: session[USER_RESET_PASSWORD_STEP] = 1 return redirect(url_for('user.register', step=1)) form = ResetPasswordDetailForm() if form.validate(): user = form.update_password() session.pop(USER_RESET_PASSWORD_STEP) return jsonify({ 'success': True, 'user': { 'username': user.username, 'mobile': user.mobile } }) return jsonify({'success': False, 'message': form.error2str()})
def distributors_revocation_data_table(): draw, start, length = data_table_params() revocations = DistributorRevocation.query.filter_by(pending=True).offset(start).limit(length) count = DistributorRevocation.query.filter_by(is_revoked=False).count() data = {'draw': draw, 'recordsTotal': count, 'recordsFiltered': count, 'data': []} for revocation in revocations: data['data'].append({ 'id': revocation.id, 'name': revocation.distributor.name, 'address': revocation.distributor.address.precise_address(), 'contact': revocation.distributor.contact, 'contact_telephone': revocation.distributor.contact_telephone, 'contact_mobile': revocation.distributor.contact_mobile, 'contract': url_for('static', filename=revocation.contract), 'vendor': revocation.distributor.vendor.name}) return jsonify(data)
def detail(item_id): item = Item.query.get_or_404(item_id) if item.is_deleted or item.is_component: abort(404) format = request.args.get('format', '', type=str) action = request.args.get('action', 'compare', type=str) if format == 'json': if action == 'detail': item_dict = {'item': item.dumps()} if item.id in statisitc.items: item_dict['distributors'] = statisitc.items[item.id] else: item_dict['distributors'] = {} if g.identity.can(user_permission): item_dict['item']['collected'] = current_user.item_collected( item.id) else: item_dict['item']['collected'] = False else: if item.is_suite: return '套件商品无法对比' image = item.images.first() image_url = image.url if image else url_for( 'static', filename='img/user/item_default_img.jpg') item_dict = { 'id': item.id, 'item': item.item, 'price': item.price, 'second_material': item.second_material, 'category': item.category, 'scene': item.scene, 'outside_sand': item.outside_sand, 'inside_sand': item.inside_sand, 'size': item.size, 'area': item.area if item.area else '——', 'stove': item.stove, 'paint': item.paint, 'decoration': item.decoration, 'story': item.story, 'image_url': image_url, 'carve': item.carve, 'carve_type': item.carve_type, 'tenon': item.tenon, 'brand': item.vendor.brand } return jsonify(item_dict) return render_template("user/detail.html")
def items_json(items): from app.models import Item if not items: return [] elif isinstance(items[0], Item): item_query = items else: item_query = Item.query.filter(Item.id.in_(items)) item_list = [] for item in item_query: image = item.images.first() image_url = image.url if image else url_for('static', filename='img/user/item_default_img.jpg') item_list.append({ 'id': item.id, 'item': item.item, 'price': item.price, 'image_url': image_url, 'is_suite': item.is_suite }) return item_list
def items_json(items): from app.models import Item if not items: return [] elif isinstance(items[0], Item): item_query = items else: item_query = Item.query.filter(Item.id.in_(items)) item_list = [] for item in item_query: image = item.images.first() image_url = image.url if image else url_for( 'static', filename='img/user/item_default_img.jpg') item_list.append({ 'id': item.id, 'item': item.item, 'price': item.price, 'image_url': image_url, 'is_suite': item.is_suite }) return item_list
def update(self): if self.type == USER_USERNAME_SETTING: if self.username.data != current_user.username and current_user.username_revisable: current_user.username = self.username.data current_user.username_revisable = False elif self.type == USER_PASSWORD_SETTING: current_user.password = self.password.data db.session.commit() logout_user() identity_changed.send(current_app._get_current_object(), identity=AnonymousIdentity()) return else: # email current_user.email = self.email.data current_user.email_confirmed = False token = md5_with_time_salt(self.email.data) redis_set(CONFIRM_EMAIL, token, {'email': self.email.data, 'role': 'user', 'action': 'confirm', 'id': current_user.id}, serialize=True) url = url_for('service.verify', token=token, _external=True) send_email(self.email.data, EMAIL_CONFIRM_SUBJECT, USER_EMAIL_CONFIRM, url=url) db.session.commit()
def test(): return url_for('static', filename='testrrr.jpg')
def item_filter(): materials = request.args.getlist('material', type=int) styles = request.args.getlist('style', type=int) scenes = request.args.getlist('scene', type=int) brands = request.args.getlist('brand', type=int) category = request.args.get('category', None, type=int) price = request.args.get('price', type=int) price_order = request.args.get('order', type=str) search = request.args.get('search', type=str) page = request.args.get('page', 1, type=int) price_list = ((1, 9999), (10000, 49999), (50000, 99999), (100000, 249999), (250000, 499999), (500000, 2147483647)) price_text = ('1万以下', '1万 - 5万', '5万 - 10万', '10万 - 25万', '25万 - 50万', '50万以上') query = Item.query.filter(Item.is_deleted == False, Item.is_component == False) if brands: brands = list(statisitc.brands['available_set'] - (statisitc.brands['available_set'] - set(brands))) query = query.filter(Item.vendor_id.in_(brands)) else: query = query.filter( Item.vendor_id.in_(statisitc.brands['available_set'])) if materials: materials = list(statisitc.materials['available_set'] - (statisitc.materials['available_set'] - set(materials))) query = query.filter(Item.second_material_id.in_(materials)) if category is not None: category = Category.query.get(category) category_ids = [] if category is not None: if category.level == 3: category_ids = [category.id] elif category.level == 2: children = statisitc.categories['available'][ category.father_id]['children'][category.id]['children'] if children: category_ids = children.keys() else: category_ids = [category.id] else: children = statisitc.categories['available'][ category.id]['children'] for child in children: if not children[child]['children']: category_ids.append(child) else: category_ids.extend(children[child]['children'].keys()) if category_ids: query = query.filter(Item.category_id.in_(category_ids)) if scenes: scenes = list(statisitc.scenes['available_set'] - (statisitc.scenes['available_set'] - set(scenes))) query = query.filter(Item.scene_id.in_(scenes)) if styles: styles = list(statisitc.styles['available_set'] - (statisitc.styles['available_set'] - set(styles))) query = query.filter(Item.style_id.in_(styles)) if price is not None and 0 <= price < len(price_list): query = query.filter(Item.price >= price_list[price][0], Item.price <= price_list[price][1]) else: price = None if search is not None and search != '': query = query.filter(Item.item.like('%' + search + '%')) if price_order == 'asc': query = query.order_by(Item.price) elif price_order == 'desc': query = query.order_by(-Item.price) elif price_order is not None: price_order = None items = query.paginate(page, current_app.config['ITEM_PER_PAGE'], False).items per_page = current_app.config['ITEM_PER_PAGE'] amount = query.count() data = { 'filters': { 'available': {}, 'selected': {} }, 'items': { 'amount': amount, 'page': page, 'pages': ceil(amount / per_page), "search": search, "order": price_order, 'query': [] } } if not brands: data['filters']['available']['brand'] = statisitc.brands['available'] else: data['filters']['selected']['brand'] = statisitc.selected( statisitc.brands['available'], brands) if not materials: data['filters']['available']['material'] = statisitc.materials[ 'available'] else: data['filters']['selected']['material'] = statisitc.selected( statisitc.materials['available'], materials) if category is None: first_categories = statisitc.categories['available'] data['filters']['available']['category'] = \ {key: {'category': first_categories[key]['category']} for key in first_categories} elif category.level == 1: data['filters']['selected']['category'] = { category.id: { 'category': category.category } } second_categories = statisitc.categories['available'][ category.id]['children'] data['filters']['available']['category'] = \ {key: {'category': second_categories[key]['category']} for key in second_categories} elif category.level == 2: data['filters']['selected']['category'] = { category.father_id: { 'category': category.father.category, 'children': { category.id: { 'category': category.category } } } } third_categories = statisitc.categories['available'][ category.father_id]['children'][category.id]['children'] if third_categories: data['filters']['available']['category'] = \ {key: {'category': third_categories[key]['category']} for key in third_categories} else: data['filters']['selected']['category'] = { category.father.father_id: { 'category': category.father.father.category, 'children': { category.father.id: { 'category': category.father.category, 'children': { category.id: { 'category': category.category } } } } } } if not scenes: data['filters']['available']['scene'] = statisitc.scenes['available'] else: data['filters']['selected']['scene'] = statisitc.selected( statisitc.scenes['available'], scenes) if not styles: data['filters']['available']['style'] = statisitc.styles['available'] else: data['filters']['selected']['style'] = statisitc.selected( statisitc.styles['available'], styles) if price is not None: data['filters']['selected']['price'] = { price: { 'price': price_text[price] } } else: data['filters']['available']['price'] = { index: { 'price': price_text[index] } for index in range(0, 6) } for item in items: image = item.images.first() image_url = image.url if image else url_for( 'static', filename='img/user/item_default_img.jpg') data['items']['query'].append({ 'id': item.id, 'item': item.item, 'price': item.price, 'image_url': image_url, 'is_suite': item.is_suite }) return jsonify(data)
def logout(): logout_user() identity_changed.send(current_app._get_current_object(), identity=AnonymousIdentity()) return redirect(url_for('main.index'))
def forbid(error): return redirect(url_for('user.login', next=request.url))
def logout(): logout_user() identity_changed.send(current_app._get_current_object(), identity=AnonymousIdentity()) return redirect(url_for('.login'))