示例#1
0
文件: views.py 项目: Bytesu/WanMuJia
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()})
示例#2
0
文件: views.py 项目: Bytesu/WanMuJia
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)
示例#3
0
文件: forms.py 项目: xeonpc/WanMuJia
 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)))
示例#4
0
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)
示例#5
0
文件: forms.py 项目: xeonpc/WanMuJia
 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()
示例#6
0
文件: forms.py 项目: xeonpc/WanMuJia
 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
示例#7
0
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)
示例#8
0
文件: views.py 项目: xeonpc/WanMuJia
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()})
示例#9
0
文件: views.py 项目: Bytesu/WanMuJia
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)
示例#10
0
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")
示例#11
0
文件: _utils.py 项目: Bytesu/WanMuJia
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
示例#12
0
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
示例#13
0
文件: forms.py 项目: xeonpc/WanMuJia
 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()
示例#14
0
def test():
	return url_for('static', filename='testrrr.jpg')
示例#15
0
文件: forms.py 项目: Bytesu/WanMuJia
 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)))
示例#16
0
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)
示例#17
0
文件: views.py 项目: xeonpc/WanMuJia
def logout():
    logout_user()
    identity_changed.send(current_app._get_current_object(),
                          identity=AnonymousIdentity())
    return redirect(url_for('main.index'))
示例#18
0
文件: views.py 项目: xeonpc/WanMuJia
def forbid(error):
    return redirect(url_for('user.login', next=request.url))
示例#19
0
文件: views.py 项目: Bytesu/WanMuJia
def logout():
    logout_user()
    identity_changed.send(current_app._get_current_object(), identity=AnonymousIdentity())
    return redirect(url_for('.login'))
示例#20
0
def test():
    return url_for('static', filename='testrrr.jpg')
示例#21
0
文件: views.py 项目: Bytesu/WanMuJia
def forbid(error):
    return redirect(url_for('user.login', next=request.url))