`

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()
分享到:
评论

相关推荐

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

    VMware Horizon 7.10 是一款强大的虚拟桌面基础设施(VDI)解决方案,它提供了集中管理和交付虚拟桌面和应用程序的功能。在本手册中,我们将聚焦于Horizon Composer服务器的安装和配置,这是一个关键组件,用于高效...

    VMware Horizon View Client 32位

    1. **增强的性能和稳定性**:此版本可能对连接速度、资源使用率以及系统稳定性进行了优化,确保用户在远程操作时能够获得流畅的体验。 2. **多平台支持**:除了32位Windows系统,可能也支持其他操作系统,如macOS和...

    VMware Horizon 7.9 测试环境搭建手册_20191003_213331.docx

    - **SQL Server 2012**: SQL Server用于存储Horizon View的各种配置数据和日志,确保数据库操作的高效和可靠性。 2. **Horizon View组件**: - **Horizon 7.9**: VMware Horizon 7.9版本引入了更多的优化和增强,...

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

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

    VMware-Horizon-Client

    3. **多平台支持**:除了Windows,VMware Horizon Client还适用于多种操作系统,包括Mac OS X、Linux、iOS和Android,确保跨平台的兼容性。 4. **硬件设备共享**:在连接到虚拟桌面时,Horizon Client可以模拟本地...

    VMWare_Horizon_Client.zip

    1. **多平台支持**:VMware Horizon Client支持多种操作系统,使得无论用户是在桌面电脑还是移动设备上,都能无缝地接入虚拟环境,提升了工作效率和灵活性。 2. **安全连接**:Horizon Client使用安全的协议进行...

    Horizon-view-7-安装手册--超详细版-外加纠错.docx

    安装和配置 VMware Horizon 7 需要对虚拟桌面基础架构有充分的了解和理解。以下是 VMware Horizon 7 安装手册超详细版的知识点总结: 一、安装前说明 在安装 VMware Horizon 7 之前,需要了解虚拟桌面基础架构的...

    VMware-Horizon-Client-4.6.1-6748947.rar

    VMware Horizon Client是一款由VMware公司开发的远程桌面和应用接入软件,主要用于连接虚拟桌面环境,如VMware Horizon 7或Horizon Cloud。这个版本,4.6.1,具有版本号6748947,是该产品的一个更新,可能包含性能...

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

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

    VMware-Horizon-快速搭建实施手册

    本文档旨在提供一个详细的 VMware Horizon 搭建实施手册,涵盖了从 ESXI 主机安装到 vCenter 安装、composer 安装、SQL server 安装、connection 安装等各个服务器配置,以及桌面模板优化的全过程实施细节。...

    VMware Horizon View Client 64位

    4. **安装文件VMware-Horizon-View-Client-x86_64-3.5.2-3150477.exe**:这是一个Windows操作系统的可执行安装文件,用于在用户的计算机上安装Horizon View Client。执行此文件会引导用户完成安装过程,包括接受许可...

    horizon7 搭建部署手册

    手册的目标是更新基础安装平台,包括 vSphere 6.5、Windows Server 2012 和 SQL Server 2012,以及后续介绍高级特性如 Workspace、vRealize Operations for Horizon 和 App Volumes。 在测试环境中,所有设置都在 ...

    Horizon 7 企业密钥

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

    horizon源码

    OpenStack Horizon是OpenStack的Web管理界面,它为用户提供了一个图形化的操作平台,便于管理OpenStack云环境。Horizon源码的分析有助于我们了解其工作原理,更好地定制和扩展OpenStack的用户界面。 【描述】:在...

    AE插件Horizon

    "AE插件Horizon"是Adobe After Effects(简称AE)的一款扩展工具,它为用户提供了全新的视觉效果和创意可能性。这款插件的核心功能是创建出水平或垂直的无限延伸背景,使得画面呈现出一种无限广阔的视界,常用于制作...

    VMware Horizon 7 安装部署文档

    ### VMware Horizon 7 安装部署关键知识点 #### 一、概述 **VMware Horizon 7** 是一款领先的桌面虚拟化解决方案,它允许企业在数据中心内部署虚拟化环境,并将其交付给员工。通过这种方式,最终用户能够在一个...

Global site tag (gtag.js) - Google Analytics