对象不支持此属性或方法: Session.CodePage = 936 解决方法!

本文介绍了一种快速解决“Microsoft VBScript 运行时错误 '800a01b6' 对象不支持此属性或方法: 'Session.CodePage'”的方法。通过修改 ASP 文件中的编码设置来避免错误并保持中文正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天调试网站时在后台出现这样的错误,“Microsoft VBScript 运行时错误 '800a01b6' 对象不支持此属性或方法: 'Session.CodePage'”    在百度搜索查看到的答案又不是很全,大多都是含糊不清的。后来我自己研究了一下,原来还有个比较快的方法!


如果你出现以下信息:


Microsoft VBScript 运行时错误 '800a01b6'


对象不支持此属性或方法: 'Session.CodePage'


\include\sysCode.asp, line 8


这就证明是你那个**.asp的<%Session.CodePage=936%>出现了问题了。


网上有人说把这句话删掉,但我删掉后网页字体变成乱码!因为这个是即显示为中文编码(936是对应编码GB2312)。 后来我把这句<%Session.CodePage=936%>改成:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
``` def chat_default(request): if request.method in ["POST", "GET"]: msg = {"code": normal_code,"msg": mes.normal_code, "data": {}} req_dict = request.session.get("req_dict") req_dict.update({"isdefault":"是"}) data=chat.getbyparams(chat, chat, req_dict) if len(data)>0: msg['data'] = data[0] else: msg['data'] = {} return JsonResponse(msg) def chat_page(request): ''' ''' if request.method in ["POST", "GET"]: msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}} req_dict = request.session.get("req_dict") #获取全部列名 columns= chat.getallcolumn( chat, chat) #当前登录用户所在表 tablename = request.session.get("tablename") #authColumn=list(__authTables__.keys())[0] #authTable=__authTables__.get(authColumn) # if authTable==tablename: #params = request.session.get("params") #req_dict[authColumn]=params.get(authColumn) '''__authSeparate__此属性为真,params添加userid,后台只查询个人数据''' try: __authSeparate__=chat.__authSeparate__ except: __authSeparate__=None if __authSeparate__=="是": tablename=request.session.get("tablename") if tablename!="users" and 'userid' in columns: try: req_dict['userid']=request.session.get("params").get("id") except: pass #当项目属性hasMessage为”是”,生成系统自动生成留言板的表messages,同时该表的表属性hasMessage也被设置为”是”,字段包括userid(用户id),username(用户名),content(留言内容),reply(回复) #接口page需要区分权限,普通用户查看自己的留言和回复记录,管理员查看所有的留言和回复记录 try: __hasMessage__=chat.__hasMessage__ except: __hasMessage__=None if __hasMessage__=="是": tablename=request.session.get("tablename") if tablename!="users": req_dict["userid"]=request.session.get("params").get("id") # 判断当前表的表属性isAdmin,为真则是管理员表 # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) __isAdmin__ = None allModels = apps.get_app_config('main').get_models() for m in allModels: if m.__tablename__==tablename: try: __isAdmin__ = m.__isAdmin__ except: __isAdmin__ = None break # 当前表也是有管理员权限的表 if __isAdmin__ == "是" and 'chat' != 'forum': if req_dict.get("userid") and 'chat' != 'chat': del req_dict["userid"] else: #非管理员权限的表,判断当前表字段名是否有userid if tablename!="users" and 'chat'[:7]!='discuss'and "userid" in chat.getallcolumn(chat,chat): req_dict["userid"] = request.session.get("params").get("id") #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 try: __authTables__=chat.__authTables__ except: __authTables__=None if __authTables__!=None and __authTables__!={}: try: del req_dict['userid'] # tablename=request.session.get("tablename") # if tablename=="users": # del req_dict['userid'] except: pass for authColumn,authTable in __authTables__.items(): if authTable==tablename: params = request.session.get("params") req_dict[authColumn]=params.get(authColumn) username=params.get(authColumn) break q = Q() msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ msg['data']['pageSize'] =chat.page(chat, chat, req_dict, request, q) return JsonResponse(msg)```优化代码
最新发布
03-19
针对上述代码,我们可以从以下几个方面对其进行优化: ### 1. **减少冗余逻辑** - 避免多次访问 `request.session` 者对字典键的重复检查。 - 合并相似条件分支。 ### 2. **封装常用功能** - 将频繁使用的函数逻辑抽取成独立的小模块(如提取表列、处理用户权限等)。 ### 3. **提高可读性和维护性** - 添加注释说明关键部分的功能。 - 使用更具描述性的变量名称,并保持一致性。 以下是经过优化后的代码版本: --- ```python from django.db.models import Q def get_user_permissions(req_dict, session, model_columns, has_message=False): """ 根据模型配置和会话信息动态更新请求参数中的用户权限字段 :param req_dict: 请求参数字典 :param session: 用户会话对象 :param model_columns: 模型的所有列名列表 :param has_message: 是否包含留言板功能标记,默认False """ try: __authSeparate__ = chat.__authSeparate__ except AttributeError: __authSeparate__ = None if __authSeparate__ == "是" and 'userid' in model_columns: try: req_dict['userid'] = session.get("params", {}).get("id") except Exception as e: print(f"Error setting userid: {e}") # 如果启用了留言板功能,则进一步限制用户可见范围 if has_message: try: __hasMessage__ = chat.__hasMessage__ except AttributeError: __hasMessage__ = None if __hasMessage__ == "是": tablename = session.get("tablename") if tablename != "users" and 'userid' in model_columns: req_dict["userid"] = session.get("params", {}).get("id") def filter_admin_access(req_dict, session, admin_flag_attr="isAdmin"): """过滤管理员认证""" tablename = session.get("tablename") allModels = apps.get_app_config('main').get_models() isAdminModel = next((m for m in allModels if hasattr(m, '__tablename__') and m.__tablename__ == tablename), None) if isAdminModel is not None: try: __isAdmin__ = getattr(isAdminModel, "__isAdmin__", None) except AttributeError: __isAdmin__ = None if __isAdmin__ == "是": if 'userid' in req_dict and 'chat' != 'chat': del req_dict["userid"] def apply_auth_tables(req_dict, session, auth_table_map=None): """应用认证表规则到请求参数""" if auth_table_map is None or not isinstance(auth_table_map, dict): return current_tablename = session.get("tablename") if current_tablename in auth_table_map.values(): user_params = session.get("params", {}) for col_name, table_name in auth_table_map.items(): if table_name == current_tablename: value = user_params.get(col_name) if value: req_dict[col_name] = value # 主视图函数重构版 def optimized_chat_page(request): if request.method not in ["POST", "GET"]: return JsonResponse({"code": error_code, "msg": f"{mes.error_method_not_allowed}"}) msg = { "code": normal_code, "msg": mes.normal_code, "data": { "currPage": 1, "totalPage": 1, "total": 1, "pageSize": 10, "list": [] } } req_dict = request.session.get("req_dict", {}) # 确保默认为空字典避免报错 columns = chat.getallcolumn(chat, chat) # 获取当前模型所有列名 session_data = request.session # 缓存session引用简化后续操作 # 更新用户权限相关的请求参数 get_user_permissions( req_dict=req_dict, session=session_data, model_columns=columns, has_message=True # 假设这里需要启用留言板控制逻辑 ) # 进行管理员特定的操作筛选 filter_admin_access(req_dict, session_data) # 应用基于认证表格的角色限定 try: __authTables__ = chat.__authTables__ except AttributeError: __authTables__ = {} apply_auth_tables(req_dict, session_data, __authTables__) # 构建查询条件Q表达式以及分页结果集 query_conditions = Q(**req_dict) # 动态构造基础查询条件 result_list, curr_page, total_pages, total_count, page_size = chat.page( chat_model_instance=chat, related_class_instance=chat, search_kwargs=req_dict, request_obj=request, condition=query_conditions ) # 扩展返回消息体内容 msg['data'].update({ "list": result_list, "currPage": curr_page, "totalPage": total_pages, "total": total_count, "pageSize": page_size }) return JsonResponse(msg) ``` --- **总结改动点:** - 提取了三个辅助函数分别负责用户的权限校验(`get_user_permissions`)、管理员特殊访问控制(`filter_admin_access`)及角色绑定(`apply_auth_tables`)。 - 减少直接依赖全局状态,改为通过显式的参数传递保证职责分离。 - 对异常捕获进行了集中化管理以便统一日志记录其他扩展需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值