当前位置: 首页 > news >正文

Python学习第十七天

Django框架-SQLite3

介绍

        Django内置了对 SQLite3 数据库的支持。SQLite3 是一个轻量级的嵌入式数据库引擎,非常适合开发、测试和小型项目。以下是关于 Django 中 SQLite3 的介绍和应用指南。(除了这些还支持mysql、oracle以及其他查询文档,本质上是一个内置数据库并且它是一个文件数据库,无需安装直接可以使用)

链接工具

命令行工具-sqlite

安装

注意了我们安装的算是一个工具只是对于sqlite3数据库的一个命令行管理工具。(也可以使用datagrip或者其他的工具)

下载地址

下载后需要注意对应的解压包中需要有.exe文件

使用sqlite3

配置环境变量将sqlite3.exe配置到path中就可以在cmd命令随时使用了

使用.help查看帮助指令

使用

常用的命令

类型命令/语句说明
命令行命令.help显示所有 SQLite3 命令行命令的帮助信息。
.tables列出当前数据库中的所有表。
.schema [表名]显示指定表的创建语句。如果不指定表名,则显示所有表的创建语句。
.databases列出当前连接的数据库文件。
.exit 或 .quit退出 SQLite3 命令行工具。
.mode MODE设置输出模式(如 csvcolumnlinelist 等)。
.headers on/off开启或关闭查询结果的列名显示。
.output FILENAME将输出重定向到指定文件。
.import FILE TABLE将文件中的数据导入到指定表中。
.show显示当前 SQLite3 的配置(如输出模式、分隔符等)。
.dump [表名]导出数据库或指定表的 SQL 语句(用于备份)。
.read FILENAME执行指定文件中的 SQL 语句。
.open FILENAME打开或切换到指定的数据库文件。
.backup DBNAME FILE备份数据库到指定文件。
.restore DBNAME FILE从指定文件恢复数据库。
SQL 语句CREATE TABLE 表名 (列定义);创建表。例如:CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
DROP TABLE 表名;删除表。
INSERT INTO 表名 (列) VALUES (值);插入数据。例如:INSERT INTO users (name) VALUES ('Alice');
SELECT 列 FROM 表名 [WHERE 条件];查询数据。例如:SELECT * FROM users WHERE id = 1;
UPDATE 表名 SET 列=值 [WHERE 条件];更新数据。例如:UPDATE users SET name='Bob' WHERE id = 1;
DELETE FROM 表名 [WHERE 条件];删除数据。例如:DELETE FROM users WHERE id = 1;
ALTER TABLE 表名 ADD COLUMN 列定义;添加列。例如:ALTER TABLE users ADD COLUMN age INTEGER;
BEGIN TRANSACTION;开始事务。
COMMIT;提交事务。
ROLLBACK;回滚事务。
PRAGMA 指令;执行 PRAGMA 指令。例如:PRAGMA table_info(users); 显示表结构信息。

常用工具-datagrip

链接

        因为他是一个文件型数据库,那么使用这个工具去查询创建就没什么可以说的了。常用的查询create都可以。

使用

其他工具navicat、PyCharm中自带的database、dbserver都可以一样的只要把驱动下载下来都可以使用。

使用

建表:

-- 使用datagrip 直接创建或者sqlite命令行工具创建都可以
create table t_user(
    id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 自增主键
    username varchar(100),
    password varchar(100),
    sex varchar(1)
);
# db相关操作
from django.db import connection
# 获取游标对象 使用游标对象还记得之前的db相关的操作嘛 直接创建表
cursor = connection.cursor()

myapp下的views下增加success和register方法

# django最新版5.1
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
#引入render
from django.shortcuts import render,redirect
from datetime import datetime
from django.db import connection
# 获取游标对象
cursor = connection.cursor()

# 定义一个文字或者html的元素或者标签
# postman请求时必须添加csrf_exempt否则会返回403
# 当你在Postman中测试POST请求时,如果没有手动添加 CSRF Token,Django 会认为这是一个潜在的 CSRF 攻击,因此返回 403 Forbidden 错误。
@csrf_exempt
def index(request):

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        retStr = f"<span style='font-size:48px;'>POST 我请求测试参数:username={username} password = {password}</span>"
        print(retStr)
    else:
        pwd = request.GET.get('pwd')
        retStr = "Get请求测试参数:%s" %pwd
    return HttpResponse(retStr)

# 指向myindex.html
def myindex(request):
    # 第三个参数为键值对传递 传递上下文或者返回的数据 使用前端接受参数时 类似于java的template也有一个基于模版前端的{{name}}
    list = [{"name":"django","age":"18"},{"name":"java","age":"18"},{"name":"python","age":"18"}]
    return render(request, 'myindex.html',
                  {"name":"",
                   "list":list,
                   "ifkey":"django",
                   "testdate":datetime.strptime('2025-03-15',"%Y-%m-%d")}
                  )


def register(request):
    if request.method == 'POST':

        username = request.POST.get('username')
        password = request.POST.get('password')
        sex = request.POST.get('sex')
        print("username:"+username,"password:"+password,"sex:"+sex)
        # 保存用户数据到 t_user 表
        cursor.execute(" insert into t_user(username,password,sex) values(%s,%s,%s)",(username,password,sex))
        connection.commit()
        return redirect('success')  # 注册成功后跳转到成功页面
    else:
        pass

    return render(request, 'register.html', {'form': []})


def success(request):
    return render(request, 'success.html')

myapp下的template中增加register和success以及myindex作为了主页增加了注册的超链接

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>User Registration</title>
    <!-- 引入 Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- 自定义 CSS -->
    <style>
        body {
            background-color: #f8f9fa;
            font-family: 'Arial', sans-serif;
        }
        .register-container {
            max-width: 500px;
            margin: 100px auto;
            padding: 30px;
            background: #ffffff;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
        }
        .register-container h2 {
            text-align: center;
            margin-bottom: 20px;
            color: #333;
            font-weight: bold;
        }
        .form-control {
            border-radius: 5px;
            padding: 10px;
            border: 1px solid #ddd;
            margin-bottom: 15px;
        }
        .form-control:focus {
            border-color: #007bff;
            box-shadow: 0 0 5px rgba(0, 123, 255, 0.25);
        }
        .btn-primary {
            width: 100%;
            padding: 10px;
            border-radius: 5px;
            background-color: #007bff;
            border: none;
            font-size: 16px;
        }
        .btn-primary:hover {
            background-color: #0056b3;
        }
        .alert {
            border-radius: 5px;
            margin-bottom: 20px;
        }
        .text-danger {
            font-size: 14px;
            margin-top: 5px;
        }
    </style>
</head>
<body>
    <div class="register-container">
        <h2>Register</h2>
        <form method="post" action="{% url 'register' %}">
            {% csrf_token %}  <!-- CSRF 令牌,防止跨站请求伪造攻击 -->

            <!-- 显示表单错误 -->
            {% if form.errors %}
                <div class="alert alert-danger">
                    <strong>Error!</strong> Please correct the errors below.
                </div>
            {% endif %}

            <!-- Username 字段 -->
            <div class="form-group">
                <label for="id_username" class="form-label">Username</label>
                <input type="text" name="username" id="id_username" class="form-control" value="{{ form.username.value|default_if_none:'' }}" required>
                {% if form.username.errors %}
                    <div class="text-danger">
                        {{ form.username.errors }}
                    </div>
                {% endif %}
            </div>

            <!-- Password 字段 -->
            <div class="form-group">
                <label for="id_password" class="form-label">Password</label>
                <input type="password" name="password" id="id_password" class="form-control" required>
                {% if form.password.errors %}
                    <div class="text-danger">
                        {{ form.password.errors }}
                    </div>
                {% endif %}
            </div>

            <!-- Sex 字段 -->
            <div class="form-group">
                <label for="id_sex" class="form-label">Sex</label>
                <select name="sex" id="id_sex" class="form-control" required>
                    <option value="">Select Sex</option>
                    <option value="M" {% if form.sex.value == "M" %}selected{% endif %}>Male</option>
                    <option value="F" {% if form.sex.value == "F" %}selected{% endif %}>Female</option>
                    <option value="O" {% if form.sex.value == "O" %}selected{% endif %}>Other</option>
                </select>
                {% if form.sex.errors %}
                    <div class="text-danger">
                        {{ form.sex.errors }}
                    </div>
                {% endif %}
            </div>

            <!-- 提交按钮 -->
            <div class="form-group">
                <button type="submit" class="btn btn-primary">Register</button>
            </div>
        </form>
    </div>

    <!-- 引入 Bootstrap 5 JS(可选) -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Registration Successful</title>
    <!-- 引入 Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- 自定义 CSS -->
    <style>
        body {
            background-color: #f8f9fa;
            font-family: 'Arial', sans-serif;
        }
        .success-container {
            max-width: 500px;
            margin: 100px auto;
            padding: 30px;
            background: #ffffff;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
            text-align: center;
        }
        .success-container h2 {
            color: #28a745;
            font-weight: bold;
            margin-bottom: 20px;
        }
        .btn-primary {
            padding: 10px 20px;
            border-radius: 5px;
            background-color: #007bff;
            border: none;
            font-size: 16px;
        }
        .btn-primary:hover {
            background-color: #0056b3;
        }
    </style>
</head>
<body>
    <div class="success-container">
        <h2>恭喜您注册成功</h2>
        <p>感谢您的注册.</p>
        <a href="{% url 'register' %}" class="btn btn-primary">注册其他用户</a>
    </div>

    <!-- 引入 Bootstrap 5 JS(可选) -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

myindex.html


<span style = 'font-size: 48px;'>
  <a href='http://127.0.0.1:8000/register/'>注册</a>
</span>

utils.py内容变更

from django.urls import path
from . import views

urlpatterns = [
    path("index/", views.index, name="index"),
    path("myindex/", views.myindex, name="myindex"),
    path('register/', views.register, name='register'),
    path('success/', views.success, name='success'),
]

后续把代码传到github仓库上

相关文章:

  • 【MySQL】数据库简要介绍和简单应用
  • 组件通信框架ARouter原理剖析
  • C语言 | 二叉树打印效果,控制台打印
  • MultipartEntityBuilder上传文件出现中文名乱码
  • 大模型架构全景解析:从Transformer到未来计算范式
  • 摄像头模块ISP处理流程
  • 百度贴吧IP和ID是什么意思?怎么查看
  • JConsole:JDK性能监控利器之JConsole的使用说明与案例实践
  • 星越L_备胎更换/千斤顶使用讲解
  • Webpack vs Rollup vs Parcel:构建工具深度对比
  • 面试系列|蚂蚁金服技术面【2】
  • Python教程(三):类对象、闭包、装饰器、类型注解、MRO
  • 表单 schema 配置化
  • @RequestParam、@RequestBody、@PathVariable
  • python 实现 A* 算法
  • AI日报 - 2025年3月16日
  • [测试]Selenium自动化测试常用函数
  • Java基础编程练习第31题-String类和StringBuffer类
  • 什么是 slot-scope?怎么理解。
  • 平安养老险深圳分公司积极开展2025年“3·15”金融消费者权益保护教育宣传活动
  • 北京银行一季度净赚超76亿降逾2%,不良贷款率微降
  • 举牌超200轮!中铁建7.76亿元竞得北京通州梨园宅地
  • 83岁连丽如每周登台说书,还上了15堂连派评书课
  • 俄宣布停火三天,外交部:希望各方继续通过对话谈判解决危机
  • 一位排球青训教练的20年时光:努力提高女排球员成才率
  • 美航母一战机坠海,美媒:为躲避胡塞武装攻击,损失超六千万美元