python 前台页面和oracle数据库联动案例-用户注册

今天是python 入门day3,案例实现界面如图,比较简单,

一个简单的用户注册页面,并且可以与Oracle数据库进行交互。

界面如图:

实现这个简单demo的过程中,遇到很多错误,

1、提交过程中提示主键不能为空

ORA-01400: cannot insert NULL into ("GWJJ_UAT_DS"."USERS"."ID")

2、'cx_Oracle.SessionPool' object has no attribute 'getconn'

cx_Oracle.SessionPool 对象没有 getconn 这个属性

3、cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library:

等等

对于一个新手,每一个错误都是拦路虎!!!

创建数据库users表,用于存储注册的用户信息:

 CREATE TABLE users (
    id NUMBER PRIMARY KEY,
    username VARCHAR2(50) NOT NULL,
    password VARCHAR2(50) NOT NULL,
    email VARCHAR2(100)
);

创建一个序列来生成ID值(这里就是自动生成主键,否则会提示ORA-01400: cannot insert NULL into ("GWJJ_UAT_DS"."USERS"."ID") )。序列可以由数据库管理员或有足够权限的用户创建

CREATE SEQUENCE phtyon_sequence_name
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
NOCYCLE
NOCACHE;

创建一个触发器,这个触发器会在每次向表中插入新行时自动调用序列,为ID列生成一个新的值。

CREATE OR REPLACE TRIGGER python_trigger_name
BEFORE INSERT ON users
FOR EACH ROW
WHEN (NEW.id IS NULL)
BEGIN
  IF :NEW.id IS NULL THEN
    SELECT phtyon_sequence_name.NEXTVAL INTO :NEW.id FROM dual;
  END IF;
END;
效果就是,这个ID是自动生成的。

创建Flask应用

创建一个名为app.py的Python文件,用于编写Flask应用。demo的核心逻辑也在这个py文件中

from flask import Flask, render_template, request, redirect, url_for, flash
import cx_Oracle

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# Oracle数据库配置
oracle_config = {
    'user': 'test',
    'password': 'test',
    'dsn': '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = test)))'
}

# 创建数据库连接池
pool = cx_Oracle.SessionPool(**oracle_config)

@app.route('/')
def index():
    return render_template('register.html')

@app.route('/register', methods=['POST'])
def register():
    username = request.form.get('username')
    password = request.form.get('password')
    email = request.form.get('email')

    try:
        conn = pool.acquire()
        cursor = conn.cursor()
        # 插入用户数据
        query = "INSERT INTO users (username, password, email) VALUES (:username, :password, :email)"
        cursor.execute(query, {'username': username, 'password': password, 'email': email})
        conn.commit()
        cursor.close()
        conn.close()

        flash('注册成功!')
        return redirect(url_for('index'))
    except Exception as e:
        flash('注册失败:' + str(e))
        return redirect(url_for('index'))


if __name__ == '__main__':
    app.run(debug=True)

创建HTML注册页面

在Flask应用的templates目录下创建一个名为register.html的HTML文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
    <style>
        /* 在此处添加CSS样式 */
    </style>
</head>
<body>
    <h2>用户注册</h2>
    <form method="post" action="{{ url_for('register') }}">
        用户名: <input type="text" name="username" required><br>
        密码: <input type="password" name="password" required><br>
        邮箱: <input type="email" name="email" required><br>
        <input type="submit" value="注册">
    </form>
    {% with messages = get_flashed_messages() %}
      {% if messages %}
        <ul>
        {% for message in messages %}
          <li>{{ message }}</li>
        {% endfor %}
        </ul>
      {% endif %}
    {% endwith %}
</body>
</html>

最后,可以再编辑器中,启动app.py了。

也可以再终端中运行app.py,启动Flask应用。

python app.py

通过浏览器访问http://127.0.0.1:5000/,看到一个简单的用户注册页面,并且可以与Oracle数据库进行交互。

整个过程中并不容易,遇到各种错误,版本不兼容,磨练新手的心态,也体验了一把,开发哥哥真的不容易!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/618510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于我转生从零开始学C++这件事:获得神器

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 几天不见 &#xff0c;甚是想念&#xff01;哈咯大家好又是我大伟&#xff0c;五一的假期已经结束&#xff0…

【AMBA Bus ACE 总线 7.1 -- ACE Domains 介绍 2】

请阅读【AMBA Bus ACE 总线与Cache 专栏 】 欢迎学习:【嵌入式开发学习必备专栏】 文章目录 AxDOMAINAxDOMAIN[1:0]的值及含义AxDOMAIN 在ARM的AXI Coherency Extensions (ACE) 协议中,AxDOMAIN[1:0]是一个重要的信号字段,用于指示传输的域类型。这个字段影响了传输对系统…

【Element-UI快速入门】

文章目录 **Element-UI快速入门****一、Element-UI简介****二、安装Element-UI****三、引入Element-UI****四、使用Element-UI组件****五、自定义Element-UI组件样式****六、Element-UI布局组件****七、Element-UI表单组件****八、插槽&#xff08;Slots&#xff09;和主题定制…

vue+springboot项目服务器部署

①创建一台opencloud8的腾讯云服务器 ②用xshell连接服务器 ③vue中新建.env.development配置文件 .env.development: VUE_APP_BASEURLhttp://localhost:9090 .env.production: VUE_APP_BASEURLhttp://服务器ip:9090 ④修改main.js import Vue from vue import App from ./A…

【LAMMPS学习】八、基础知识(6.3)使用 LAMMPS GUI

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。 …

【Threejs进阶教程-算法篇】1.常用坐标系介绍与2d/3d随机点位算法

2d/3d随机算法 学习ThreeJS的捷径坐标系简介平面直角坐标系和极坐标系空间直角坐标系圆柱坐标系球坐标系球坐标系与直角坐标系的转换 基于坐标系系统的随机点位算法平面直角坐标系随机平面直角坐标系随机的变形 空间直角坐标系随机二维极坐标系随机圆柱坐标系随机基于Cylinderc…

MathType永久激活版写毕业论文必备神器以及破解版下载图文教程(附mathtype7镶嵌到word步骤)

前言 由于临近暑假&#xff0c;大学生和研究生都需要写自己的论文。使用的工具叫做MathType&#xff0c;它是加拿大的公司开发的&#xff0c;今天给大家带来的是Win和Mac版Mathtype最新破解版。 自从Mathtype7的发布&#xff0c;很多的老师和学生都不知道它从哪里下载和激活&…

Web前端一套全部清晰 ⑧ day5 CSS.3 选择器、PxCook软件、盒子模型

谁不是一路荆棘而过呢 —— 24.5.12 CSS.3 选择器、PxCook软件、盒子模型 一、选择器 1.结构伪类选择器 1.作用: 根据元素的结构关系查找元素。 选择器 说明 E:first-child 查找第一个 E元素 E:last-child 查找最后一个E元素 E:nth-chil…

Windows环境下VSCode加MinGw-W64搭建C/C++开发环境

前言&#xff1a; 本文记录了自己在配置 Windows环境下 VSCode&#xff0c;并安装MinGW-W64来搭建windows操作系统下下的C/C开发环境。本文重点参考了如下链接中知乎上的文章里介绍的方法&#xff0c;在windows上安装 MinGW-W64。 vscode c/c环境配置&#xff08;MinGW&…

crossover24中文破解版百度云免费下载 crossover永久免激活汉化包安装使用教程 crossover24激活码分享

原则上&#xff0c;我们不提倡各位使用破解版&#xff0c;这是处于对知识产权的保护&#xff0c;也是为了各位的长远利益。使用正版你可以获得更优质的服务和完善的产品功能。 但仍然有部分用户由于预算、使用习惯等原因&#xff0c;需要破解版。所以本文不讲原则&#xff0c;…

【科研绘图 基础版】01 使用Python绘制时间序列折线图

下面这段代码绘制了一个折线图&#xff0c;其中包含了实际平均温度数据和使用线性回归模型预测的平均温度数据&#xff08;用来近似地表示数据的整体趋势&#xff09;。 具体来说&#xff0c;图中的横轴表示年份&#xff0c;纵轴表示平均温度。蓝色的实心线代表了实际的平均温度…

电商购物系统首页的商品分类

如上图对商品的一个分类实际上和省市区的分类十分类似 , 都是通过自关联的方法来实现 , 但是这里不同的是 , 涉及到外键来获取数据 首先让我们来看一下最后通过后端返回数据的形式是什么样子的 """{1:{channels:[{id:1 , name:手机 , url:},{}{}],sub_cats:[{…

【机器学习300问】88、什么是Batch Norm算法?

一、什么是Batch Norm&#xff1f; &#xff08;1&#xff09;Batch Norm的本质 神经网络中的Batch Normalization&#xff08;批量归一化&#xff0c;简称BatchNorm或BN&#xff09;是一种改进神经网络训练过程的规范化方法&#xff0c;BatchNorm的主要目的是加速神经网络的训…

MFC的句柄概念以及句柄类型

在MFC&#xff08;Microsoft Foundation Class&#xff09;桌面应用程序中&#xff0c;窗口是通过句柄&#xff08;Handle&#xff09;来进行管理和操作的。 句柄是一个标识符&#xff0c;用于唯一标识和引用窗口、控件、设备上下文等对象。在MFC桌面应用程序中&#xff0c;常…

单片机的中断

1. 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置 当中央处理机CPU正在处理某件事的时候外界发生紧急事件请求&#xff0c;要CPU暂停当前的工作&#xff0c;转而去处理这个紧急事件&#xff0c;处理完以后&#xff0c;再回到原来中断的地方&#xff0c;继续原…

[蓝桥杯]真题讲解:合并数列(双指针+贪心)

[蓝桥杯]真题讲解&#xff1a;班级活动&#xff08;贪心&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;合并数列&#xff08;双指针贪心&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #define in…

经典笔试题:快速排序 计数排序

Problem: 912. 排序数组 思路 &#x1f468;‍&#x1f3eb; 三叶题解 &#x1f496; AC&#xff1a;计数排序 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) class Solution {public int[] sortArray(int[] nums) {int max -50001, min 50001;for (…

别人家的UI表单为什么这么漂亮?而你却千篇一律。

设计漂亮的移动UI页面表单页需要考虑以下几个方面&#xff1a; 布局和结构设计 合适的布局和结构&#xff0c;使表单页面看起来整洁、清晰&#xff0c;并且易于使用。可以使用网格系统或者栅格布局来对表单进行划分&#xff0c;使不同的表单元素有明确的位置和排列。 色彩和配…

猫头虎分享已解决Bug || **Vue.js脚手架安装失败** Error: unable to fetch template`

猫头虎分享已解决Bug &#x1f42f; || Vue.js脚手架安装失败 &#x1f6ab;Error: unable to fetch template 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题…

Linux-笔记 开发板Uboot命令使用

将之前自学的知识整理了一下笔记&#xff0c;以便回忆 信息查询命令 1、help/?&#xff1a;查看所支持命令 > ? md md - memory displayUsage: md [.b, .w, .l] address [# of objects]2、bdinfo&#xff1a;查询板子信息 > bdinfo arch_number 0x00000000 boot_p…