写点什么

基于远程开发环境部署 Django 与开发者空间 GaussDB 的实践应用

  • 2025-12-09
    贵州
  • 本文字数:4336 字

    阅读完需:约 14 分钟

一、概述

1.1 案例介绍

Django 是一个高级的 Python Web 开源应用框架,可以快速开发安全和可维护的网站。Django 负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。


本案例借助开发者空间云开发环境部署 Django 项目,并与开发者空间提供的免费 GaussDB 数据库实例对接,完成一个 Web 应用构建。通过实际操作,让大家深入了解如何利用 Django 开发并部署一个 Web 应用。


华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云开发环境、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者 从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。

1.2 适用对象

  • 企业

  • 个人开发者

  • 高校学生

1.3 案例时间

本案例总时长预计 40 分钟。

1.4 案例流程


说明:


  1. 申请华为云开发者空间的 GaussDB 数据库;

  2. 进行华为云开发者空间的云开发环境进行 Django 安装与适配;

  3. 启用 Django Web 服务,适配 GaussDB,在 Client 端测试 Django 的建表和数据操作。

1.5 资源总览

本案例预计花费 0.8 元。

二、案例准备工作

2.1 配置云开发环境

根据案例《开发者空间 - 云开发环境使用指导》,请查看下面链接,配置云开发环境,并通过 xshell 等链接工具登录云开发环境。


开发者空间 - 云开发环境使用指导

2.2 领取 GaussDB 数据库

免费领取 GaussDB 在线试用版(2025 年 06 月 21 日 - 2025 年 12 月 31 日)。


华为开发者空间-GaussDB云数据库领取与使用指导


注:部署的 Django 项目需要对接 GaussDB,因此 GaussDB 需要绑定 EIP,参考上述指导中领取部分第(5)步

2.3 验证云开发环境与 GaussDB 互通

通过 xshell 或 windows 命令终端登录云开发环境,测试 GaussDB 能否连接,如下是通的


三、 Django 部署与 Python 驱动安装

3.1 创建项目虚拟环境

因为业务场景的 Python 开发,多数都是构建一个大型应用程序,并且不希望各种组件的各种版本之间相互冲突,所以需要设置一个虚拟环境。


先需要更新下载源。执行如下命令


sudo yum -y updatesudo yum -y upgrade
复制代码


pip3 install virtualenv         #安装virtualenvpython3 -m venv myenv          #创建虚拟环境source myenv/bin/activate       #激活环境
复制代码



环境激活后,用户名前会有(myenv)字样,如上图所示。

3.2 部署 Django 组件

安装之前,需要更新下 pip。


python3 -m pip install --upgrade pip
复制代码



用 python3 自带的安装工具 pip3,安装组件。


pip3 install django==3.2
复制代码


注:安装 django3.2 版本,因为默认安装是 django4.2.23,对 PG 内核版本要求至少在 pg12 以上,但 GaussDB 的 pg 内核是 9.204,不满足 django4.2.23 需求。


可通过以下命令检测 Django 是否安装成功


pythonimport djangodjango.__version__
复制代码


3.3 安装 GaussDB 数据库对应的 Python 驱动

GaussDB 数据库对应的 Python 驱动为 psycopg2。即 Django 组件允许通过 psycopg2 驱动,连接 GaussDB 数据库,并操作数据对象。


  1. 不建议直接用 pip 去安装 psycopg2 驱动。所以从华为云 GaussDB 数据库官方文档中下载驱动。


wget https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1750076538851/GaussDB_driver.zipunzip GaussDB_driver.zipcd GaussDB_driver/Centralized/Hce2.0_arm_64/tar zxvf GaussDB-Kernel_505.2.1_Hce_64bit_Python.tar.gz
复制代码



解压后有两个文件夹:


  • psycopg2:psycopg2 库文件。

  • lib:lib 库文件。


  1. 使用 root 用户将 psycopg2 复制到 python 安装目录下的 site-packages 文件夹下。


sudo cp psycopg2 $(python3 -c 'import site; print(site.getsitepackages()[0])') -r
复制代码


  1. 修改 psycopg2 目录权限为 755。


sudo chmod 755 $(python3 -c 'import site; print(site.getsitepackages()[0])')/psycopg2 -R
复制代码


  1. 将 psycopg2 目录添加到环境变量 $PYTHONPATH,并使之生效。


export PYTHONPATH=$(python3 -c 'import site; print(site.getsitepackages()[0])'):$PYTHONPATH
复制代码


  1. 将解压后的上述 lib 目录,配置在环境变量 LD_LIBRARY_PATH 中。


本案例对应的 lib 目录是/home/xxx/GaussDB_driver/Centralized/Hce2.0_arm_64/lib,读者根据自己实际情况做修改


export LD_LIBRARY_PATH=/home/xxx/GaussDB_driver/Centralized/Hce2.0_arm_64/lib:$LD_LIBRARY_PATH
复制代码


  1. 在创建数据库连接之前,需要先加载如下数据库驱动程序:


import  psycopg2
复制代码


注意:如果引入 psycopg2 报找不到 libpq.so.5.5,是因为环境变量 LD_LIBRARY_PATH 没有包含 libpq.so.5.5 的目录路径,由于上述步骤 5 用 export 设置的临时环境变量,所以在新的会话中需要重新设置 LD_LIBRARY_PATH 指定之前解压的驱动 lib 目录

3.4 通过本地 IDE 创建 Django 项目工程

通过本地 IDE 连接云开发环境,参考使用VSCode连接云开发环境


通过 VSCode 连接成功后,在 IDE 里终端窗口通过 Django 组件,创建一个 Web 项目,项目名称为 myproj。


mkdir ~/myprojdirdjango-admin startproject myproj ~/myprojdir
复制代码



项目 myproj 创建完成后,项目目录中应该包含以下内容:


3.5 创建 myproj 项目的 Web 应用

在 myproj 的项目目录里,创建一个应用,例如本例中创建一个 djangoapp 的应用


cd myprojdirdjango-admin startapp djangoapp
复制代码



此时 myprojdir 里会生成一个 djangoapp 应用目录,如下:



  • models.py : 用来存放 djangoapp 应用需要的在 GaussDB 数据库上的表。

  • views.py : 用来存放 djangoapp 应用要使用的视图结构。

  • test.py : 用来存放 djangoapp 应用需要的测试用例。

  • app.py : 用来编写 djangoapp 主程序。

四、myproj 项目对接 GaussDB 数据库

4.1 修改 GaussDB 数据库密码验证方式

进入GaussDB数据库控制台,进入 GaussDB 实例,点击参数管理,修改 GaussDB 的密码验证参数 password_encryptio_type1。并点击保存生效。


4.2 创建 GaussDB 普通用户并赋 admin 权限

通过右上角登录 GaussDB 的 SQL 操作界面,用如下 SQL 创建 Django 链接的登录用户。


create user myuser with sysadmin password 'GaussDB@123';
复制代码


4.3 Django 项目端配置对接 GaussDB 数据库

进入创建的项目目录~/myprojdir/myproj 里,其中 setting.py 就是 Django 项目的配置文件。


vim ~/myprojdir/myproj/settings.py
复制代码


配置字段如下(根据实际设置的 GaussDB 链接用户修改对应参数):


DATABASES = {    'default' : {        'ATOMIC_REQUESTS' : 'True',        'ENGINE' : 'django.db.backends.postgresql_psycopg2',        'NAME' : 'postgres',       #数据库名        'USER' : 'myuser',        #用户名        'PASSWORD' : 'GaussDB@123',      #密码        'HOST' : '139.9.68.119',        #生态版GaussDB弹性公网ip        'PORT' : '8000',             #GaussDB数据库端口}
复制代码


除了 DATABASES 的配置项,还要在 ALLOWED_HOSTS 列表中,添加 GaussDB 服务器的 IPv4 的地址。Web 应用才能允许 GaussDB 数据库的访问。


ALLOWED_HOSTS = ['139.9.68.119','localhost']
复制代码

4.4 注册 APP ---- djangoapp

在 settings.py 中,INSTALLED_APPS 数组,添加 app 名称。如下:


注意:图片换成代码


4.5 验证 myproj 项目与数据库 GaussDB 对接结果

cd ~/myprojdirpython3 manage.py migrate
复制代码



此时可以 GaussDB 数据库中,看到已经有 4 张表迁移到 GaussDB 里。


五、启动 Web 服务并进行业务操作

5.1 创建 Django 的 WEB 服务

在 IDE 终端中执行如下命令启动 Web 应用,部署端口为 8082(创建云开发环境时放开的端口都可指定,依据自身端口开放情况选择即可):


python3 manage.py runserver 0.0.0.0:8082
复制代码


注:此处的 0.0.0.0 就是设置 ALLOWED_HOSTS 里的 localhost 地址



Web 应用启动后,如果想通过本地访问 Web 页面,需要做本地和云开发环境的端口映射,参考开发者空间 - 云开发环境使用指导-第4章2小节做端口映射


hdspace devenv start-tunnel --instance-id=xxx --remote-port=8082 --local-port=1233
复制代码


端口映射完成后可通过如下地址本地访问 Django 的 web 网页,如下图所示:


http://localhost:1233/admin
复制代码


5.2 创建用户登录 Web 应用

在 IDE 的 myprojdir 目录下创建 create_user.py,执行 py 文件完成用户创建:


create_user.py 文件内容如下:


from django.contrib.auth.models import Useruser = User(username='test',email='test@qq.com')user.first_name='test'user.last_name='test'user.is_superuser = Trueuser.is_active = Trueuser.is_staff = Trueuser.password = 'test123'user.save()
复制代码



执行 create_user.py 文件,可查看 GaussDb 数据库中用户表中新增一条记录:



但此时用户密码是明文存放在数据库中的,不符合 django 规范,还不能使用该用户登录 admin 管理后台。


通过如下命令更改 test 用户密码,更改后可登录 Web 页面,登录页面如下:


python manage.py changepassword test
复制代码


5.3 创建表 Question 和 Choice

在 IDE 中 djangoapp 应用里编辑 model.py 文件,添加表 Question 和 Choice。


添加如下内容:


from django.db improt models
class Question(models.Model): question_text = models.CharField(max_length = 200) pub_date = models.DateTimeField("date published")
class Choice(models.Model): question = models.ForeignKey(Question, on_delete = models.CASCADE) choice_text = models.CharField(max_length = 200) votes = models.IntegerField(default = 0)
复制代码


执行如下命令,创建将两张表 Question 和 Choice 同步到 GaussDB 数据库的任务:


python3 manage.py makemigrations djangoapp
复制代码



注意:如果迁移 djangoapp 项目时报 libpq.so 找不到,设置 export LD_LIBRARY_PATH=/home/xxx/GaussDB_driver/Centralized/Hce2.0_arm_64/lib:$LD_LIBRARY_PATH,其中 xxx 替换成自己的用户名


再执行如下命令,创建将表事务同步到 GaussDB 数据库的 SQL:


python3 manage.py sqlmigrate djangoapp 0001
复制代码


如果执行命令过程中报错,可以执行如下命令检查错误原因


python3 manage.py check
复制代码



如果没有报错,则执行如下命令,执行迁移任务:


python3 manage.py migrate
复制代码



待迁移完成后,GaussDB 数据库可看到 Question 和 Choice 两张表:


5.4 Django 项目从 GaussDB 读写表数据

在 IDE myprojdir 目录下创建 py 文件 operate_question.py,完成对数据表 djangoapp_question 的增改查等操作:operate_question.py 文件内容如下:


from djangoapp.models import Choice, QuestionQuestion.objects.all()from django.utils import timezoneq = Question(question_text="What's new?", pub_date=timezone.now())q.save()q.idq.question_textq.pub_dateq.question_text = "What is up?"q.save()Question.objects.all()quit()
复制代码


执行 operate_question.py 文件,可看到 Question 数据表中新增一条记录:




至此本案例关于在开发者空间--远程开发环境中部署 Django 与开发者空间生态版 GaussDB 实践操作完毕。

五、反馈改进建议

如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
基于远程开发环境部署Django与开发者空间GaussDB的实践应用_数据库_华为云开发者联盟_InfoQ写作社区