• Djiango 模版系统详解(ORM数据模型-使用mysql数据库增删改查)


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

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

    变量定义:在函数视图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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1.2 生成迁移配置文件(编译)
    python3  manage.py makemigrations
    
    • 1

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

    1.3 同步db.sqlite3数据库
    python3  manage.py migrate
    
    • 1

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

    配置使用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
    
    • 1
    • 2
    • 3
    • 4
    2.0 安装pymysql工具
    pip install pymysql
    
    • 1

    在这里插入图片描述

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

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

     https://docs.djangoproject.com/en/4.1/ref/settings/#databases
    
    • 1
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '172.16.226.7',
            'PORT': '3306',
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4.0 配置app模块下__init__.py模块
    import pymysql
    pymysql.install_as_MySQLdb()
    
    • 1
    • 2

    在这里插入图片描述

    5.0 初始化数据库
    python3  manage.py makemigrations  #生成迁移文件
    python3  manage.py migrate   #同步数据库
    
    • 1
    • 2

    在这里插入图片描述
    同步完成,会自动在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)
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

    http://127.0.0.1:8000/myapp/user_add
    
    • 1
    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})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

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

    查看数据库所有用户

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

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

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    http://127.0.0.1:8000/myapp/user_list
    
    • 1

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

    改数据/删数据

    在这里插入图片描述

    内置管理后台

    在这里插入图片描述

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

    在这里插入图片描述

    python3 manage.py createsuperuser
    
    • 1

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

  • 相关阅读:
    7-26 求素数个数——朴素筛
    智慧社区AcrelCloud-3200预付费云平台
    MongoDB复杂Json数据的增删改查
    Python中的内置函数getattr()、setattr()
    Python中通过socketserver库创建服务端
    unity 发布apk,在应用内下载安装apk(用于更大大版本)
    4. 【自动驾驶与机器人中的SLAM技术】点云中的拟合问题和K近邻
    Mongodb的分页优化及索引使用
    c++笔记
    leetCode 718.最长重复子数组 动态规划 + 优化(滚动数组)
  • 原文地址:https://blog.csdn.net/weixin_43546282/article/details/127442562