简单工厂模式

最近用的flask框架写了个网站,目前要在app上也在同步开发,服务端的一些业务逻辑是相同的,只是有些行为比如返回结果不同,web上需要返回一个跳转的url,app上需要返回json格式的数据,这种情况用简单工厂模式比较合适,小文章,直接上代码:

基类,以login为例,校验用户名密码,返回return code和错误信息

class UserService(object):
    def __int__(self):
        return

    def login_post(self):
        form = CMSLoginForm(flask.request.form)
        if form.validate():
            phone = form.phone.data
            password = form.password.data
            user = CMSUser.query.filter_by(phone=phone).first()
            remember = form.remember.data
            if user and user.check_pwd(password):
                flask.session[CMS_SESSION_ID] = user.id
                if remember:
                    flask.session.permanent = True
                else:
                    flask.session.permanent = False
                return HttpCode.ok,''
            else:
                return HttpCode.paramserror, u'邮箱或密码错误'
        else:
            return HttpCode.paramserror, form.get_error()

子类继承UserService,先调用父类完成校验,然后根据返回码,返回不同的结果,url跳转或是json格式的结果

class WebUser(UserService):
    def __int__(self):
        return

    def login_post(self):
        retcode,message = super(WebUser, self).login_post()
        if retcode == HttpCode.ok:
            return redirect(url_for('cms.cms_index'))
        else:
            return render_template('cms/login.html',messages= message)
class MobileUser(UserService):
    def __int__(self):
        return

    def login_post(self):
        retcode, message = super(MobileUser, self).login_post()
        if retcode == HttpCode.ok:
            return json_result()
        else:
            return json_params_error(message=message)

使用的时候,先初始化两个工厂类

webuser = WebUser()
mobileuser = MobileUser()

在视图函数中,根据需求调用相应的对象即可

from service_helper.user_service import webuser as userhelper
@bp.route('/login/',methods=['GET','POST'])
def login():
    if request.method == 'GET':
        return flask.render_template('cms/login.html')

    if request.method == 'POST':
        return userhelper.login_post()

很简单,很实用,易扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值