class AddView(View): ''' 添加 ''' def _init_form(self): try: self._form = Form('app_add_form', request, session) self._form.add_field('text', '苹果应用地址', 'apple_url', data={'attributes':{'class':'m-wrap large'}}) self._form.add_validator(AppAddValidator) except FormException, ex: return self.error(str(ex))
class LoginView(FlaskView): def before_request(self, name): self._view = AdminView() self.login_form = Form('login_form', request, session) self.login_form.add_field('text', '用户名', 'username', data={'attributes': {'class': 'm-wrap placeholder-no-fix', 'placeholder': 'Username'}}) self.login_form.add_field('password', '密码', 'password', data={'attributes': {'class': 'm-wrap placeholder-no-fix', 'placeholder': 'Password'}}) self._view.assign('FormField', FormElementField) def get(self): return self._view.render('login', title="维享管理系统", form=self.login_form) def post(self): if not self.login_form.has_error(): username, password = request.form["username"], request.form["password"] user = User.find_one(username=username) if user and user.verify_password(password): login_user(user) return redirect(url_for('admin_app_collection_list')) flash(u"错误的用户名或者密码") return self._view.render('login', title="维享管理系统", form=self.login_form)
class AppTopicInfoBaseView(View): ''' 专题信息添加修改基类 ''' def get_country_and_language_options(self): #语言选项 lang_options = [] langs = DB.client_support_language.find() for lang in langs: lang_options.append((lang['name'],lang['code'])) #国家选项 country_options = [] countries = DB.country.find() for country in countries: country_options.append((country['name'], country['code'])) return lang_options, country_options def _init_form(self): self._view.assign('FormField', FormElementField) lang_options, country_options = self.get_country_and_language_options() self._form = Form('app_topic_add_form', request, session) self._form.add_field('text', '专题名称', 'name', data={'attributes': {'class': 'm-wrap large'}}) self._form.add_field('text', '排序', 'order', data={'attributes': {'class': 'm-wrap large'}}) self._form.add_field('textarea', '描述', 'description', data={'attributes': {'class': 'm-wrap large'}}) self._form.add_field('checkbox', '投放语言', 'language', data={'value': '', 'option': lang_options}) self._form.add_field('checkbox', '投放国家', 'country', data={'value': '', 'option': country_options}) self._form.add_field('file', '专题图标', 'pic', data={'attributes': {}}) self._form.add_field('radio', '状态', 'status', data={'value': '0', 'option':[('发布','1'), ('未发布','0')]}) self._form.add_field('radio', '版本', 'prisonbreak', data={'value': '0', 'option':[('正版','0'), ('越狱','1')]})
class EditView(AppDetailBaseView): ''' 编辑 ''' def before_request(self, name): super(EditView, self).before_request(name) _id = self._id bundle_id = self.bundle_id if _id is None and bundle_id is None: return self.error('参数不正确') if _id is None: self.app_data = DB.AppBase.find_one({'bundleId':bundle_id}) else: self.app_data = DB.AppBase.find_one({'_id':ObjectId(_id)}) if self.app_data == None: return self.error('该应用不存在') self.icon = {} if 'artworkUrl512' in self.app_data: self.icon['apple'] = artworkUrl512_to_114_icon(self.app_data['artworkUrl512']) if 'local_icon' in self.app_data: self.icon['local'] = self.app_data['local_icon'] def _init_form(self, data=None): self._view.assign('FormField', FormElementField) #语言选项 lang_options = [] langs = DB.language.find() for lang in langs: lang_options.append((lang['name'], lang['code'])) #主分类选项 genre_options = [] genres = DB.app_genre.find({'parentGenre':36}) for genre in genres: name = '' try: name = genre['genreName']['ZH'] except: name = genre['genreName']['EN'] if genre['genreId'] == 6014: name = "游戏" elif genre['genreId'] == 6021: name = "报刊杂志" genre_options.append((name, str(genre['genreId']))) #check device support, check if supportIphone or supportIpad self.supportIphone = 0 self.supportIpad = 0 if "supportIphone" in self.app_data: self.supportIphone = self.app_data["supportIphone"] else: if "supportedDevices" in self.app_data: if True in [item.startswith("iPhone") for item in self.app_data["supportedDevices"]]: self.supportIphone = 1 else: supportIphone = 0 if "supportIpad" in self.app_data: self.supportIpad = self.app_data["supportIpad"] else: if "supportedDevices" in self.app_data: if True in [item.startswith("iPad") for item in self.app_data["supportedDevices"]]: self.supportIpad = 1 else: self.supportIpad = 0 if data: data["supportIphone"]= self.supportIphone data["supportIpad"] = self.supportIpad app_cn = DB.AppBase_CN.find_one({"trackId": data["trackId"]}) if app_cn: data["trackName_CN"] = app_cn["trackName"] data["description_cn"] = app_cn.get("description", "") data["releaseNotes_cn"] = app_cn.get("releaseNotes", "") self._form = Form('app_edit_form', request, session) self._form.add_field('file', '上传图标', 'pic', data={'attributes': {}}) self._form.add_field('text', 'trackId', 'trackId', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', 'trackName', 'trackName', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '应用中文名称', 'trackName_CN', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '编辑翻译(中文)', 'cnname', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '编辑翻译(阿拉伯)', 'arname', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', 'bundleId', 'bundleId', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '官方应用地址', 'trackViewUrl', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '官方版本', 'version', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '评分', 'trackContentRating', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '最低系统要求', 'minimumOsVersion', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '可下载版本', 'downloadVersion', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('radio', '主分类', 'primaryGenreId', data={'option': genre_options}) self._form.add_field('radio', '支持iPhone', 'supportIphone', data={'option': [("是", "1"), ("否", "0")]}) self._form.add_field('radio', '支持iPad', 'supportIpad', data={'option': [("是", "1"), ("否", "0")]}) self._form.add_field('checkbox', '语言', 'languageCodesISO2A', data={'option': lang_options}) self._form.add_field('textarea', '描述', 'description', data={'attributes':{'class':'m-wrap large','rows':'10'}}) self._form.add_field('textarea', '描述(中)', 'description_cn', data={'attributes':{'class':'m-wrap large','rows':'10'}}) self._form.add_field('textarea', '更新介绍', 'releaseNotes', data={'attributes':{'class':'m-wrap large','rows':'10'}}) self._form.add_field('textarea', '更新介绍(中)', 'releaseNotes_cn', data={'attributes':{'class':'m-wrap large','rows':'10'}}) self._form.add_field('radio', '审核', 'review', data={'option': [("审核通过", "1"), ("未审核", "0")]}) self._form.set_value(data) self._form.add_validator(AppInfoValidator) @route('/edit', methods=['GET', 'POST'], endpoint='admin_app_edit') def do_request(self): if request.method != 'POST': try: self._init_form(self.app_data) except FormException, ex: return self.error(str(ex)) return self._view.render('app_edit', form=self._form, app=self.app_data, icon=self.icon) try: self._init_form(dict(request.form)) except FormException, ex: return self.error(str(ex))
class CreateView(View): ''' 创建 ''' def _init_form(self): self._view.assign('FormField', FormElementField) #语言选项 lang_options = [] langs = DB.language.find() for lang in langs: lang_options.append((lang['name'],lang['code'])) #主分类选项 genre_options = [] genres = DB.app_genre.find({'parentGenre': 36}) for genre in genres: name = '' try: name = genre['genreName']['ZH'] except: name = genre['genreName']['EN'] if genre['genreId'] == 6014: name = "游戏" elif genre['genreId'] == 6021: name = "报刊杂志" genre_options.append((name, str(genre['genreId']))) self._form = Form('app_create_form', request, session) self._form.add_field('text', 'trackId', 'trackId', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', 'trackName', 'trackName', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', 'bundleId', 'bundleId', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('text', '官方版本', 'version', data={'attributes':{'class':'m-wrap large'}}) self._form.add_field('radio', '主分类', 'primaryGenreId', data={'option': genre_options}) self._form.add_field('checkbox', '支持设备', 'supportedDevices', data={'value': '', 'option': [("iPad", "iPad"), ("iPhone", "iPhone")]}) self._form.add_field('checkbox', '语言', 'languageCodesISO2A', data={ 'value': '', 'option': lang_options}) self._form.add_field('textarea', '描述', 'description', data={'attributes':{'class':'m-wrap huge'}}) self._form.add_field('textarea', '更新介绍', 'releaseNotes', data={'attributes':{'class':'m-wrap huge'}}) self._form.add_validator(AppInfoValidator) @route('/create', methods=["GET","POST"], endpoint='admin_app_create') def get(self): try: self._init_form() except FormException, ex: return self._view.error(str(ex)) if request.method == "POST": if self._form.validate(): #_id = MongoId() data = { 'trackId':int(request.form['trackId']), 'trackName':request.form['trackName'], 'bundleId':request.form['bundleId'], 'version':request.form['version'], 'primaryGenreId':int(request.form['primaryGenreId']), 'languageCodesISO2A':request.form.getlist('languageCodesISO2A'), 'description':request.form['description'], 'releaseNotes':request.form['releaseNotes'], 'supportedDevices': request.form.getlist('supportedDevices') } DB.AppBase.update({'bundleId':request.form['bundleId']}, {'$set':data}, upsert=True) app = DB.AppBase.find_one({"trackId": int(request.form["trackId"])}) #return redirect(create_url('.app.edit', {'_id':app._id})) return redirect(url_for("admin_app_edit") + "?_id=" + str(app["_id"])) else: message = {'status':'error', 'message':'添加失败'} self._form.add_message(**message) return self._view.render('app_create', form=self._form)