在进行SaaS开发时,面对如何对所有请求数据进行统一处理的需求,需要掌握中间件技术。如何将复杂的数据关系设计在DB中,需要掌握Django ORM中关联关系的技巧。如何对多条数据进行分页显示,需要掌握前后端数据交互。
Tag: SaaS
Django基础——报错和调试记录
报错类型 RuntimeError at /task/register You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set. Django can’t redirect to the slash URL while maintaining POST data. Change your form to point to dev.paas-class.bktencent.com:8000/task/register/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings. 通过ajax写POST请求时,提示需要在路径后面加上slash“/”才可以,即: Template-loader postmortem… Continue reading Django基础——报错和调试记录
蓝鲸实践作业——Django基础(二)
在SaaS上要开发一个类似评论功能,需要掌握何从页面上进行数据的异步提交,如何通过Django编写接口,如何通过ORM对数据进行增删改查,如何通过Admin界面管理DB中数据等技术。 题目 1.实现“选择业务”功能。调用cmdb的search_business接口,将获取到的业务渲染到“执行任务”页面的“选择业务”下拉框。2.实现 “选择主机“功能。a> 当页面初次加载时,或”选择业务”下拉框选到某业务时,查询选择主机接口。b> 实现选择主机接口,接收页面传上的json数据。c> 接口调用cmdb的search_host接口,将主机IP, 操作系统等信息返回d> 将返回的IP数据以表格形式渲染,每行显示一台主机 将该功能实现后,上线到生产环境。 思路 选择业务 在model.py中建立search_business表 在admin.py中注册该表 在命令窗口更新 在html中修改代码读取对应值 需要在view.py中将数据表search_business传入 原本担心如何把多个参数传入render函数中,但上次提供的教程采用字典格式,解决我的疑惑。 修改tasks.html遍历businesses 此时,可以现在admin页面增添数据项测试 选择主机 新增一个选择框 内容需要从页面中获取数据 可以筛选出表格的每一行,但出于可重用性考虑,建立主机数据表 与第一步相同,在admin.py中注册,再在命令行窗口更新数据表。之后在admin界面加入数据,在view.py像html传入数据,再修改html渲染传入的数据即可: 同理让选择框读取相应的数据 进行主机的选择 对选择框的内容进行读取,点击提交后,就可以刷新界面,将选定的得出。 通过选择器可以得到目前处于筛选框中的是哪个主机地址。 我们写script实现对页面内容的调整:表格重新加载为指定的那个 一个小小的尝试,实现页面内容的改动:点击提交按钮将表格内容删除。 因此我们只需要将表格只展示为符合条件的主机即可 简单的实现方法:将提交时产生的条件筛选产生新的数据项:再次渲染页面即可 通过ajax直接改变失败 表格中新增一项筛选特定主机 访问成功,提交ajax请求 但并没有减少表格显示,调试发现,此时的页面内容并没有跳转或更新。而且根据需求,最好只进行页面部分内容的更新而非刷新整个页面,继续其他方向的尝试—— 通过属性改变失败 可以把不被标签内的属性设为不可见,但此外不行,因此必须对内容进行替换。 最终方法 实现思路 首先通过逆向分析一个含有表格网页的代码 得知可以获得ajax返回的data并进行处理,找到了思路: 将页面此时拉取的特定主机编号通过ajax返回到筛选特定服务器的函数 函数利用条件筛选出特定主机 将特定主机的数据项返回至data JavaScript通过对data的处理填写入表格 将页面中表格的内容更新为新的表格 实现过程 处理返回为json格式的data数据 数据解析出来: 将表格内容动态替换为新的数据 先测试一组数据 观察格式,调整一下 现在只需要把传入数据替换位置即可… Continue reading 蓝鲸实践作业——Django基础(二)
蓝鲸实践作业——Django基础(一)
蓝鲸SaaS推荐基于Django框架进行开发。本节课程的入门级使用详解和实战演示,让你对Django MVC框架结构的每个模块的功能和相互关系有一个深刻的理解和掌握。 1. 在开发框架中拉起上节课的两个静态页面2. 实现“选择脚本”功能。a> 脚本表包含脚本名称和脚本内容两个字段b> 通过admin页面录入三条基本linux命令c> 通过”执行任务”页面的“选择脚本”可进行DB中数据的选择 将该功能实现后,上线到生产环境。 基本操作 进入工程 之前已建立好工程,按照指导贴子在home_application中进行修改,就不需要再创建新应用了(下一步可以忽略) 创建应用 将新应用添加到default.py文件对应位置 编码问题 用notepad将错误的编码修改为utf-8编码即可 admin没有权限登录问题 最初没有添加用户名称,之后遇到登录问题才明白少了步骤。 按照文档,进行第一步的添加user,添加新的migration.py文件,按照说明运行就成功了 go on 按照教程修改文件如下: models.py admin.py 线下成功 上线到生产环境 码云同步 在之前创建的git项目所在地址打开git bash 添加新修改文件 到开发者中心部署 上线后链接正确,但选项处空白:因为这里的admin处还未添加 我们直接在正式部署的环境处修改 进入https://paas-class.bktencent.com/o/【appname】/admin/后按照刚才的过程添加新的脚本 成功显示 选择题 Django的生命周期包含哪些?*多选 匹配成功后走到相对应的views函数,视图函数执行相关的逻辑代码返回执行结果 Django把客户端想要的数据作为一个字符串返回给客户端,客户端接收数据,渲染到页面展现给用户 url经过Django中的wsgi时请求对象创建完成,经过django的中间件,然后到路由系统匹配路由 当用户在浏览器输入url时,浏览器会生成请求头和请求体发送给服务端 下面哪些是Django的内置组件?*多选 model auth form admin 解答 model 是django的架构组成 内置组件: auth auth是django内置的用户认证系统,可以快速的实现登录,注册,注销,修改密码的功能 form form类,来处理web开发中的表单相关事项.form最常做的是对用户输入的内容进行验证,为此django的forms类提供了全面的内容验证和保留用户上次输入数据的支持 form组件的两大功能:… Continue reading 蓝鲸实践作业——Django基础(一)
蓝鲸实践作业——前端基础
处在互联网时代,对于页面内容展示的前端技术的术语,HTML, CSS, Javascript等大家一定耳熟能详。本节课程可以让你掌握如何实现页面的这几项基础技术。 题目 实现如下两个静态页面(可通过蓝鲸MagicBox实现)1> 两个页面有相同的导航栏,”执行任务”和“任务纪录”2> “执行任务”页面包含以下元素:a>两个下拉框:“选择业务” 和 “选择脚本”b>”执行”按钮c> 一个表格,包含以下几个表头:选择框、序号,IP, 操作系统,操作(选择框列用以勾选主机,进行后续提交操作)3> “任务纪录”页面包含以下元素:a> 三个下拉框:业务,用户,任务 一个“提交”按钮b> 一个时间选择器c> 一个表格,表头包含 “业务”“用户” “任务” “操作时间”“机器数” “状态” “参数” “详情” 将这两个页面成功“保存”,并“下载”到本地。 过程 第一个界面主要通过教程指引,按步骤完成;第二个界面则是完全依照教程展示的思路独立完成。 “执行任务” a&b 对MagixBox的使用途径不清楚,通过论坛的教程,找到PC端入口,之后通过可视化拖拽,将基本的组件完成编辑。 将代码复制到本地的html文件,即可通过浏览器打开。 c> 一个表格,包含以下几个表头:选择框、序号,IP, 操作系统,操作 “任务纪录” 通过观察入手,两个按钮目前没有添加效果,因此只是简单的把顺序互换,得到基础轮廓: a> 三个下拉框:业务,用户,任务 这一步同样简单,刚才的界面有两个复选框,我们复制其中的一个复选框并将其与其他的放在同一层次即可 不过此时,提交按钮自动移至下方,尚不知如何更改复选框的大小。 b> 一个时间选择器 在组件库中寻找 直接将代码复制到文件中的结果是苍白的 所以需要加入引入依赖文件,直接在最前面粘贴即可。 此时 原因是,通过这里描写可以看到,必须在使用其他js插件前调入jQuery,而我图省事直接把获得时间的js描述放到了前面,所以就没有加载成功。 还要注意,不要重复添加jQuery哦! c> 一个表格,表头包含 “业务”“用户” “任务” “操作时间”“机器数” “状态” “参数” “详情” 同样,我们先找到一个模板,并根据需要进行修改… Continue reading 蓝鲸实践作业——前端基础
蓝鲸实践作业——SaaS 应用开发进阶
Django工程开发好后,需要将它进行部署。通过本节课程中将Django工程转化为蓝鲸SaaS,并使用开发者中心进行部署的展示,你可掌握蓝鲸开发框架组件以及它集成的扩展能力,包括ESB组件, 后台Celery任务,数据可视化等。 题目 1.将脚本执行动作放到celery任务中异步执行2.将执行结果根据celery id存入同一条记录数据 将该功能实现后,上线到生产环境。 celery使用 出现报错如下: from celery.utils import timer2 File “C:\Users\cascara\Desktop\LearningMaterials\SAAS\saas\bkenv\lib\site-packages\celery\utils\timer2.py”, line 19 from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger ^ SyntaxError: invalid syntax 经查询,是python版本不匹配的问题,应当使用3.6版本。虽然之前使用虚拟环境,但仍然发现是3.7版本 虚拟环境 使用python第三方库virtualenv实现多版本共存(虚拟环境),可以指定python版本 或者通过-p参数指向python.exe文件路径 进入虚拟环境 问题 from setuptools import setup, Extension, Feature ImportError: cannot import 是setuptool版本的问题,python3源中的setuptools已经升级到46以上。所以导致pip安装失败 AttributeError: module ‘os’ has no attribute ‘uname’ RuntimeError: failed to… Continue reading 蓝鲸实践作业——SaaS 应用开发进阶