Django 第四章 模版系统详解(ORM数据模型-使用mysql数据库增删改查)

news2024/11/26 16:53:08

djiango模版系统:
用于自动渲染一个文本文件,一般用于HTML页面,模版引擎渲染的最终HTML内容返回给客户端浏览器
模版系统分成两部分

静态部分: 例如html css .js
动态部分 djiango 模版语言,类似于jinja语法

变量定义:在函数视图render中的context传入,类似于字典对象。
变量在模版中引用,格式:{{ key }}

静态网站模式

在这里插入图片描述

动态网站模式

在这里插入图片描述

djiango模式

在这里插入图片描述
在这里插入图片描述

认识ORM

对象关系映射:是一种程序设计技术,用于实现面向对象编程语言里不通类型系统的数据之间转发,简单说就是在编程语言中实现的一种虚拟对象数据库。我们对虚拟对象数据库进程操作,它会转化成具体的sql去早错数据库,这样以来我们就不需要去学习复杂的sql语句了
ORM优点:不必熟悉复杂的sql语句,容易上手,避免新手写sql效率问题
在这里插入图片描述

1.0 修改settings.py配置文件,增加myapp模块

在这里插入图片描述

1.1 编写models.py配置文件

from django.db import models

class User(models.Model):
    user = models.CharField(max_length=30)
    mane = models.CharField(max_length=30)
    sex = models.CharField(max_length=10)
    age = models.IntegerField()
    label = models.CharField(max_length=100)

1.2 生成迁移配置文件(编译)

python3  manage.py makemigrations

执行完会生成如图所示文件在这里插入图片描述
在这里插入图片描述

1.3 同步db.sqlite3数据库

python3  manage.py migrate

在这里插入图片描述
第一次同步会初始化所有的模块,至此,已经完成数据库表的创建

配置使用mysql

1.0 docker创建 mysql实例

docker run -d --name db --network=host   \
-p 3306:3306 -v mysqldata:/var/lib/mysql  \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7 --character-set-server=utf8

2.0 安装pymysql工具

pip install pymysql

在这里插入图片描述

3.0 修改djiango默认数据库连接方式

修改 settins.py配置文件
官方配置文件

 https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '172.16.226.7',
        'PORT': '3306',
    }
}

4.0 配置app模块下__init__.py模块

import pymysql
pymysql.install_as_MySQLdb()

在这里插入图片描述

5.0 初始化数据库

python3  manage.py makemigrations  #生成迁移文件
python3  manage.py migrate   #同步数据库

在这里插入图片描述
同步完成,会自动在mysql中创建一个myapp_user的表

6.0 使用ORM增删改查

6.1 编写urls.py视图文件
from django.urls import path, include
from myapp import views
urlpatterns = [
    path('user_add',views.user_add)
]
6.2 编写路由文件
from django.shortcuts import render,HttpResponse
from myapp.models import User
def user_add(request):
    if  request.method == "GET":
        return  render(request,'user_add.html')
    elif request.method == "POST":
        # 获取前端提交的数据
        user = request.POST.get("user")
        name = request.POST.get("name")
        sex = request.POST.get("sex")
        age = request.POST.get("age")
        label = request.POST.get("label")
    # 向数据库提交数据
    User.objects.create(
           user=user,
           name=name,
           sex=sex,
           age=age,
           label=label,
    )
    return render(request,'user_add.html')
6.3 编写html模版文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户添加</title>
</head>
<body>
<form action="" method="post">


      <h2>注册用户</h2><br>
        用户名:<input type="text" name="user"><br>
        姓名:<input type="text" name="name"><br>
        性别:<input type="text" name="sex"><br>
        年龄:<input type="text" name="age"><br>
        标签:<input type="text" name="label"><br>
    <button type="submit">提交</button>
</form>
</body>
</html>

在这里插入图片描述
如图所示

http://127.0.0.1:8000/myapp/user_add
6.4 提交数据测试

在这里插入图片描述
在这里插入图片描述
登陆数据库发现已经插入刚才提交数据!验证成功
需要注意的是需要关闭CSRF安全功能
在这里插入图片描述

6.6 添加数据成功返回提示

增加对数据判断条件

 from django.shortcuts import render,HttpResponse
from myapp.models import User
# from myapp.models import User
# Create your views here.
def user_add(request):

    if  request.method == "GET":
        return  render(request,'user_add.html')
    elif request.method == "POST":
        # 获取前端提交的数据
        user = request.POST.get("user")
        name = request.POST.get("name")
        sex = request.POST.get("sex")
        age = request.POST.get("age")
        label = request.POST.get("label")
        try:
    # 向数据库提交数据
            User.objects.create(
                user=user,
                name=name,
                sex=sex,
                age=age,
                label=label,
            )
            msg = "用户添加成功"
            code = 0  #自定义状态码
        except:
            msg = "用户添加失败"
            code = 1 #自定义状态码
    return render(request,'user_add.html',{'msg':msg, 'code':code})

在这里插入图片描述
修改html模版,增加判断条件
在这里插入图片描述

查看数据库所有用户

1.0 新增路由
在这里插入图片描述
2.0 新增视图

def  user_list(request):
    user_list = User.objects.all()  #获取所有数据
    return render(request,"user_list.html",{'user_list': user_list})

3.0 新增模版并打印数据user_list.htm

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>所有用户列表</title>
</head>
<body>
{{ user_list }}

<table border="1">
    <thead>
        <tr>
            <th>用户名</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>标签</th>
        </tr>
    </thead>
    <tbody>
        {% for i  in user_list %}
            <tr>
                <td>{{ i.user }}</td>
                <td>{{ i.name }}</td>
                <td>{{ i.sex }}</td>
                <td>{{ i.age }}</td>
                <td>{{ i.label }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>

</body>
</html>
http://127.0.0.1:8000/myapp/user_list

在这里插入图片描述
根据条件查询
在这里插入图片描述

改数据/删数据

在这里插入图片描述

内置管理后台

在这里插入图片描述

配置使用djiango内置后台
http://127.0.0.1:8000/admin/login/?next=/admin/ahth

在这里插入图片描述

python3 manage.py createsuperuser

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud 组件Gateway服务网关【全局过滤器】

目录 1&#xff0c;全局过滤器 1.1&#xff1a;全局过滤器作用 1.2&#xff1a;自定义全局过滤器 1.3&#xff1a;过滤器执行顺序、 2&#xff1a;跨域问题 2.1&#xff1a;什么是跨域问题 2.2&#xff1a;示例跨域问题 2.3&#xff1a;解决跨域问题 1&#xff0c;全局…

python将CSV文件(excel文件)按固定行数拆分成小文件

最近接到一个需求&#xff0c;就是把非常大的CSV文件&#xff0c;电脑根本打不开&#xff08;或者打开也不能完全展现所有的数据&#xff09;&#xff0c;以每 80万(不够80万行的也独自成为一个单独的文件) 行进行拆分成一个小文件&#xff0c;各位小伙伴在日常工作中有没有遇到…

seata分布式事务1.4版本TM注册全局事务之源码分析(五)

今天我们分析seata分布式事务1.4版本TM注册到全流程的源码&#xff0c;这也是事务执行的核心开始&#xff1a; 首先分为客户端TM和服务端TC&#xff0c;业务发起肯定在TM端&#xff0c;接受在TC端。 整体类图&#xff1a; 一、业务入口TM端&#xff1a; 1、GlobalTransactio…

将本地文件上传到gitee和GitHub,以及Github加速访问

&#xff08;1&#xff09;我全程使用网络上合法加速软件&#xff0c;网易UU加速器是网易自主研发极速引擎&#xff0c;属于合法软件。我们进行加速行为也只是针对于Github这一个网站。 &#xff08;2&#xff09;GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;纯技…

Win,M1Mac上安装jupyter的MATLAB支持插件的方法

tags: MATLAB Win Mac Tips 写在前面 11月的最后一天了, 总结一下支持MATLAB的一个jupyter的插件, 有了这个你就可以在jupyter notebook或者jupyter lab上面使用MATLAB语句了, 还是很不错的, 虽然我安装了好久… 下面来说一下我在我的电脑以及朋友的电脑(Win11)上面安装这个…

安科瑞安全用电监测,智慧用电装置,导轨式安装带无线通讯功能

安科瑞 王晶淼/司红霞 前言 随着电气化的迅猛发展和用电普及程度的日益提高,电已经成为人类生存和发展必不可少的能源之一。然而,由于种种原因,由电气引发的火灾和爆炸事故也直呈现上升趋势。电气设备的绝缘大量使用塑料、橡胶、绝缘漆、稀释剂等易燃物品,在电气设备运行中,由…

【Redis】数据结构---String

文章目录String(字符串)1.Redis 键(key)2.String(字符串)2.1常用命令2.2.String底层结构3.空间分配策略3.1空间预分配3.2惰性空间释放3.3为什么SDS的最大长度是512M?4.SDS面试题String(字符串) 1.Redis 键(key) keys *查看当前库所有key (匹配&#xff1a;keys *1)exists ke…

使用并行流的注意事项

遇到的问题&#xff1a;当时用并行流的时候期望结果7&#xff0c;但是偶尔会有结果不对的情况。。。 如下代码&#xff1a; public static void main(String[] args) {long startSystem.currentTimeMillis();List<String> alist new ArrayList<String>(Arrays.a…

【读书笔记】打开心智

打开心智 0&#xff0c;写在前面 什么是打开心智&#xff1f;我认为是通过更好的认识人类&#xff0c;认识自己&#xff0c;了解自己的本性&#xff0c;然后顺应本性指导和改变自己对事物的看法&#xff0c;约束自己的行为的过程。这也是一个认识心智到打开心智的过程。其实我…

代码随想录刷题|LeetCode 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

目录 121. 买卖股票的最佳时机 思路 暴力解法 贪心算法 动态规划 买卖股票的最佳时机 贪心算法 动态规划 122.买卖股票的最佳时机II 思路 分析递推公式 买卖股票的最佳时机II 贪心算法 动态规划 121. 买卖股票的最佳时机 题目链接&#xff1a;力扣 思路 暴力解法 暴力解答会超…

矩池云|GPU 分布式使用教程之 TensorFlow

GPU 分布式使用教程之 TensorFlow TensorFlow 提供了6种策略实现分布式计算&#xff0c;各个策略详情请参考官方文档。本文档使用 MirroredStrategy 实现单机多卡分布式&#xff0c;MultiWorkerMirroredStrategy 实现多机多卡分布式计算。 选择机器 单机多卡分布式&#xff1…

【MySQL进阶】多表连接的原理

【MySQL进阶】多表连接的原理 文章目录【MySQL进阶】多表连接的原理前言一&#xff1a;连接简介1&#xff1a;连接的本质2&#xff1a;连接过程简介二&#xff1a;连接的原理1&#xff1a;嵌套循环连接&#xff08;Nested-Loop Join&#xff09;2&#xff1a;使用索引加快连接速…

MySQL 8.*版本 修改root密码报错

1、mysql.sock报错 解决办法&#xff1a; 1、根据报错提示&#xff0c;是无法找到/tmp下面的mysql.sock。 2、全局搜索该文件&#xff1a;mysql.sock。 使用命令&#xff1a;find / -iname "mysql.sock" 为mysql.sock该文件创建软连接&#xff0c;命令如下&#x…

基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Redis企业版数据库如何支持实时金融服务?

一、数字化转型正在颠覆银行业和金融业 随着金融科技初创公司和互联网巨头利用前沿技术重塑客户对金融服务的预期&#xff0c;金融服务行业正在经历大规模的数字化颠覆。 对于非接触式支付、移动银行、信贷决策、欺诈检测等服务&#xff0c;金融业客户要求“实时体验”&#…

使用tinode架设自己的私有聊天服务

需求 众所周知的原因&#xff0c;使用公用的即时聊天工具并不安全&#xff0c;比如某企鹅家的"wei xin"&#xff0c;我们需要一个自己的安全的聊天工具&#xff0c;比如我们需要传递账号以及密码等&#xff1b; 方案1&#xff1a; 使用网页工具将文本加密&#xf…

一、【redux】redux简介 mini版求和Demo

文章目录1、学习文档2、redux是什么3、什么情况下需要使用redux4、redux工作流程5、redux的三个核心概念5.1、action5.2、reducer5.3、store6、redux的核心API6.1、createStore()6.2、store对象6.3、applyMiddleware()6.4、combineReducers()7、求和Demo&#xff08;纯react版&…

拖死项目的不是团队,可能是失败的管理

项目中的活动&#xff0c;归根结底是由人来完成的&#xff0c;如何发挥项目成员的能力&#xff0c;对于项目的成败起着至关重要的作用。如何充分地发挥团队成员的能力&#xff0c;对项目经理也是一个挑战。 在团队管理者我们会遇见这些难题&#xff1a; 1、团队凝聚力不足&a…

配置CentOS

一、启动虚拟机 1、登录虚拟机 出现[rootlocalhost]#提示符&#xff0c;表明登录成功 2、查看IP 命令&#xff1a; ip addr 3、是否ping通外网 命令&#xff1a;ping www.baidu.com 二、配置静态IP地址 1、修改网卡配置文件 命令&#xff1a;vi /etc/sysconfig/net…

UBoot怎么跳转到Kernel:uboot与linux的交界

不知道你是否有这种感觉&#xff0c;就是学习了一段时间Uboot&#xff0c;学习了一段时间kernel&#xff0c;也知道Uboot是引导程序。但是总是连不起来。 我为什么来的这样的感受是因为&#xff0c;我最近在学习安全相关的东西。但是这个安全的东西应用在kernel里面进行&#…