简单工厂模式

来源:互联网 发布:怎么做个软件 编辑:程序博客网 时间:2024/06/05 14:11

最近用的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()

很简单,很实用,易扩展

原创粉丝点击