`

horizon对sql表的增删改查操作

阅读更多
首先根据horizon/doc/source/tutorials/dashboard.rst新加目录结构mydashboard->mypanel
一,从数据库中取数据,显示在mypanel的index页面
1.tables.py
  class InstancesTable(tables.DataTable): 
   定义index页面的字段为数据库里表的字段 
   这里定义了,name、age字段   (数据库中的id字段是自增的主键)

2.urls.py
  url(r'^$', views.IndexView.as_view(), name='index'),

3.views.py
from openstack_dashboard.dashboards.mydashboard.testpanel import tabs as mydashboard_tabs
  class IndexView(tabs.TabbedTableView):
      tab_group_class =mydashboard_tabs.YourpanelTabs
      template_name = 'mydashboard/mypanel/index.html'

4.tabs.py
 
from openstack_dashboard.dashboards.mydashboard.mypanel import usemysql  
  class YourpanelTabs(tabs.TabGroup):  
      slug = "yourpanel_tabs"  
      tabs = (UsersTab,)  //需要修改
      tabs = (InstanceTab,BooksTab,)  
      sticky = True  
  新加UsersTab
   class UsersTab(tabs.TableTab):
    name = _("Users Tab")
    slug = "users_tab"
    table_classes = (tables.InstancesTable,)
    template_name = ("horizon/common/_detail_table.html")
    preload = False
    def has_more_data(self, table):
        return []
    def get_instances_data(self):
        sql=usemysql.sql()
        instances=sql.list()
        return instances

5.新加usemysql.py文件,在这里对数据库进行操作
import MySQLdb
from openstack_dashboard import api


class sql():
    db = MySQLdb.connect(user='', db='', passwd='', host=' ')
    cursor = db.cursor()
    def list(self):
        self.cursor.execute('SELECT * FROM users ORDER BY id')
        myarr=self.cursor.fetchall()
        aa=[]
        for i in range(len(myarr)):
            aa.append(api.nova.Server({},False))  //要使从数据库取得的数据显示在mypanel的表格中,数据必须符合horizon定义的格式
            aa[i].id=myarr[i][0]
            aa[i].name=myarr[i][0+1]
            aa[i].age=myarr[i][0+2]
        instances=aa
        return instances

二,删除user
1.tables.py
from openstack_dashboard.dashboards.mydashboard.mypanel import usemysql
from openstack_dashboard import policy
from django.utils.translation import ungettext_lazy
class InstancesTable(tables.DataTable): 
    class Meta: 
         row_actions = (DeleteUser,)   //需要新加

添加DeleteUser类
class DeleteUser(policy.PolicyTargetMixin, tables.DeleteAction):
    @staticmethod
    def action_present(count):
        return ungettext_lazy(
            u"Delete User",
            u"Delete Users",
            count
        )
    @staticmethod
    def action_past(count):
        return ungettext_lazy(
            u"Deleted User",
            u"Deleted Users",
            count
        )
    def allowed(self, request, datum):
        return True
    def delete(self, request, obj_id):
        sql=usemysql.sql()
        sql.delete(obj_id)
        return []

2.usemysql.py新加如下内容
class sql():
    def delete(self,obj_id):
        self.cursor.execute("DELETE FROM users WHERE id = '"+obj_id+"'")
        self.db.commit()

三,增加user
  1.tables.py
 
class InstancesTable(tables.DataTable):
      class Meta:  
          table_actions = (CreateUser,)
  新加CreateUser 类
  class CreateUser(tables.LinkAction):
      name = "User"
      verbose_name = _("Create User")
      url = "horizon:mydashboard:mypanel:create"
      classes = ("ajax-modal",)
      icon = "plus"
      def allowed(self, request, instance=None):
          return True

  2.urls.py
   
 url(r'^create/$', views.CreateUserView.as_view(), name='create'),

  3.views.py新加CreateUserView类
from horizon import forms
from openstack_dashboard.dashboards.mydashboard.mypanel import forms as mydashboard_forms
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse_lazy
  class CreateUserView(forms.ModalFormView):  
    form_class = mydashboard_forms.CreateUser
    form_id = "create_image_form"
    modal_header = _("Create An User")
    submit_label = _("Create User")
    submit_url = reverse_lazy("horizon:mydashboard:mypanel:create")  
    template_name = 'mydashboard/mypanel/create.html'  
    context_object_name = 'user'
    success_url = reverse_lazy("horizon:mydashboard:mypanel:index")  
    page_title = _("Create An User")
    def get_initial(self):
        initial = {}
        for name in [
            'name',
            'age',
        ]:
            tmp = self.request.GET.get(name)
            if tmp:
                initial[name] = tmp
        return initial

  4.forms.py 新加CreateUser类
from openstack_dashboard.dashboards.mydashboard.mypanel import usemysql
from django.utils.translation import ugettext_lazy as _
  class CreateUser(forms.SelfHandlingForm):  
    id = forms.CharField(label=_("Person ID"),  
                                  widget=forms.HiddenInput(),  
                                  required=False)
    name = forms.CharField(max_length=255, label=_("Person Name"))
    age = forms.CharField(max_length=255, label=_("Person Age"))

    def __init__(self, request, *args, **kwargs):
        super(CreateUser, self).__init__(request, *args, **kwargs)
    def handle(self,request, data):
        sql=usemysql.sql()
        sql.create(data)
        return [] 

   5.usermysql.py新加create方法
   
def create(self,data):
        aa="insert into users(name,age) values('"+data['name']+"','"+data['age']+"')"
        self.cursor.execute(aa) 
        self.db.commit() 

   6.在templates/mypanel下新加create.html与_create.html
    create.html
  
 {% extends 'base.html' %}
    {% load i18n %}
    {% block title %}{% trans "Create An User" %}{% endblock %}
    {% block main %}
    {% include 'project/images/images/_create.html' %}
    {% endblock %}
    _create.html
    {% extends "horizon/common/_modal_form.html" %}
    {% load i18n %}
    {% block ng_controller %}ImageFormController as ctrl{% endblock %}
    {% block form_attrs %}enctype="multipart/form-data"{% endblock %}
    {% block modal-body-right %}
      <h3>{% trans "Description:" %}</h3>
    {% endblock %}



四、修改user
1.tables.py
from horizon import forms
from openstack_dashboard import api
 class InstancesTable(tables.DataTable):  
    name = tables.Column("name", verbose_name=_("Name"),form_field=forms.CharField(max_length=64),update_action=UpdateCell)  
    age = tables.Column("age", verbose_name=_("Age1"),form_field=forms.CharField(max_length=64),update_action=UpdateCell)  
    在字段后面新加:form_field=forms.CharField(max_length=64),update_action=UpdateCell
  class Meta:
      row_class = UpdateRow   //新加

新加UpdateCell与UpdateRow
class UpdateRow(tables.Row):  
    ajax = True  
    def get_data(self, request, id):  
        user=api.nova.Server({},False)
        user.id=id
        return user  
class UpdateCell(tables.UpdateAction):  
    def allowed(self, request, instance, cell):  
        policy_rule = (("identity", "identity:update_project"),)  
        return True  
    def update_cell(self, request, datum, id,cell_name, new_value):  
        aa=datum
        sql=usemysql.sql()   
        sql.online(id,cell_name,new_value)
        return True  


2.usemysql.py 新加online函数
 def online(self,id,cell_name,new_value):
        if cell_name=='name':
            self.cursor.execute("update users set name='"+new_value+"' where id='"+id+"'")
        elif cell_name=='age':
            self.cursor.execute("update users set age='"+new_value+"' where id='"+id+"'")
        self.db.commit()
分享到:
评论

相关推荐

    horizon7 搭建部署手册

    都有一些欠缺,所以本 手册的主 要 目 标 是 对 Horizon View 的基础安装平台进行更新,其中包括了 vSphere6.5、Windows Server 2012 及 SQL Server 2012等平台软件的更新,后期将对 Horizon View 的高级版本特性,...

    适用于 Linux 的 VMware Horizon Client 安装和设置 指南

    本《适用于 Linux 的 VMware Horizon Client 安装和设置指南》文档提供了有关在 Linux 客户端系统上安 装、配置和使用 VMware Horizon® Client™ 软件的信息。 本文档中的信息包括安装和使用适用于 Linux 的 ...

    最新VMware-Horizon-7中文文档-使用适用于Windows的Horizon-Client.pdf

    * VMware Horizon Client 需要 Windows 操作系统,支持的桌面操作系统包括 Windows 7、Windows 8、Windows 8.1 和 Windows 10。 * VMware Horizon Client 需要满足某些系统要求,如实时音频-视频的系统要求、扫描仪...

    Horizon 7 管理指南

    本文档还介绍了如何对 Horizon 7 组件进行维护和故障排除。 目标读者 本文档中的信息面向任何需要配置和管理 VMware Horizon 7 的人员。本文档中的信息专门为已熟练掌握虚 拟机技术和数据中心操作、并具有丰富经验的...

    适用于 Chrome 的 VMware Horizon Client 用户指南

    据输入 Horizon Client 后,服务器会对您的凭据进行身份验证,然后服务器会查找授权您使用的远程桌面 和已发布的应用程序。 产品增强功能 内部部署的 Horizon 连接服务器 Horizon Agent for Linux Horizon Agent ...

    VMware Horizon View7桌面虚拟化部署图文教程(专业完整版).docx

    4. Horizon Connection Server:该服务充当客户端的连接点,Horizon Connection Server 通过 Windows Active Directory 对用户提供身份验证,并将请求定向到相应的虚拟机、或服务器。 5. Horizon Composer:该服务...

    VMware Horizon VIEW8 安装部署.pdf

    VMware Horizon view8安装手册

    Horizon 7 企业密钥

    ( Horizon 7 Enterprise Key(100并发数-亲测可用)大家快点下载了

    适用于 Windows 的 VMware Horizon Client 用 户指南

    本《适用于 Windows 的 VMware...据输入 Horizon Client 后,服务器会对您的凭据进行身份验证,然后服务器会查找授权您使用的远程桌面 和已发布的应用程序。 有关在远程桌面中安装的软件的信息,请联系您的系统管理员。

    VMware Horizon View Client 32位

    VMware Horizon View Client x86版本支持 3.5.2 截止2015年11月20截止为最新版本 在官网下载太费劲

    VMware Horizon View 5.2配置手册

    此手册旨在搭建VMware Horizon View 5.2 的测试环境。 1、VMware Horizon View 5.2 配置手册之一:域、DNS、DHCP 安装配置 2、VMware Horizon View 5.2 配置手册之二:数据库服务器安装配置 3、VMware Horizon ...

    为 Horizon 7 设置 TLS 证书 的方案

    《为 Horizon 7 设置 TLS 证书的方案》提供了一些示例来说明如何设置 TLS 证书以供 Horizon 7 服务器使 用。第一个方案演示如何从证书颁发机构获取签名 TLS 证书,并确保证书具有可供 Horizon 7 Server 使用 的格式...

    Horizon 7 架构规划指南

    《Horizon 7 体系结构规划指南》主要介绍了 VMware Horizon™ 7 的相关信息,包括主要功能特性和部署选 项,同时简要介绍了生产环境中的常见组件设置方式。 本指南回答了以下问题: n 本产品能否解决您需要解决的...

    VMware Horizon View 中文资料汇总

    VMware+Horizon+PPT View使用报表工具.vbs VMware+workspace部署文档.pdf VMware+View容量规划工具+2.0.xlsm VMware+View+5.0+VS+Citrix+XenDesktop+5.5.pdf vmware+horizon+workspace安装与配置.pdf Horizon+View+...

    Horizon Console 管理指南

    《VMware Horizon Console 管理指南》介绍了如何在 Horizon Console 中配置和管理 VMware Horizon® 7、如何创建管理员、如何设置用户身份验证,以及如何配置策略和执行管理任务。本文档还介绍了如何对 Horizon 7 ...

    Horizon Client 和 Agent 安全指南

    Horizon Client 3.x/4.x/5.x 和 View Agent 6.2.x/Horizon Agent 7.x 2019 年 12 月 VMware Horizon 7 7.11 《Horizon Client 和 Agent 安全指南》提供了 VMware Horizon® Client™ 和 Horizon Agent(对于 Horizon...

    07-VMware-Horizon-7.10安装操作配置手册-Horizon-Composer服务器安装.pptx

    07-VMware-Horizon-7.10安装操作配置手册-Horizon-Composer服务器安装.pptx

    vmware-Horizon 7 安装与部署.one

    vmware-Horizon 7 安装与部署

Global site tag (gtag.js) - Google Analytics