Django之操作MySQL

这篇具有很好参考价值的文章主要介绍了Django之操作MySQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、主要文件介绍

-mysite项目文件夹

    --mysite文件夹

        ---settings.py        配置文件

        ---urls.py              路由与视图函数对应关系(路由层)

        ---wsgi.py             wsgiref模块

    --manage.py            django的入口文件

    --db.sqlite3               django自带的sqlite3数据库(小型数据库 功能不是很多还有bug)

    --templates                html文件存放文件夹

    --static                      存放静态文件

        ---css

        ---js

        ---img

        其他第三方文件

    --app01文件夹

        ---admin.py           django后台管理

        ---apps.py             注册使用

        ---migrations文件夹        数据库迁移记录

        ---models.py         数据库相关的 模型类(orm)

        ---tests.py             测试文件

        ---views.py            视图函数(视图层)

二、settings.py配置文件

INSTALLED_APPS    # 注册的app
MIDDLEWARE        # django中间件
TEMPLATES         # html文件存放路径配置
DATABASES         # 项目指定的数据库
LANGUAGE_CODE = 'en-us'    # 文字编码
TIME_ZONE = 'UTC'    # 时间
APPEND_SLASH = False    # 取消url自动加斜杠 默认是True
STATIC_URL = 'static/'  # 类似于访问静态文件的令牌
"""如果你想要访问静态文件 你就必须以static开头"""
STATICFILES_DIRS = [    # 静态文件配置
    os.path.join(BASE_DIR, "static"),
]
# django链接MySQL
# 1.配置文件中配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'data',
        'USER': 'root',
        'PASSWORD': '123123',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'CHARSET': 'utf8'
    }
}
# 2.在项目名下的init或任意的应用名下的init文件中书写以下代码即可
import pymysql
pymysql.install_as_MySQLdb()

三、urls.py

from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),  # 路由匹配
    path('login/', views.login),  # 登录功能
    path('register/', views.reg),  # 注册功能
    path('userlist/', views.userlist),  # 展示用户列表
    path('edit_user/', views.edit_user, name='xxx'),  # 编辑用户 name起别名做反向解析
    # 反向解析前端<a href="{% url 'xxx' %}?user_id={{ user_obj.id }}" class="btn btn-primary btn-xs">编辑</a>
    # 反向解析后端 from django.shortcuts import reverse    reverse('xxx')
    path('delete_user/', views.delete_user),  # 删除用户
]

四、views.py

from django.shortcuts import render, HttpResponse, redirect

def index(request):
    # django小白必会三板斧(render, HttpResponse, redirect)
    # return HttpResponse("hello world")  # 返回字符串类型的数据
    # return render(request, 'index.html')  # 返回html文件 自动去templates文件夹下查找文件
    # return redirect('https://www.baidu.com')  # 跳转别人的网址
    # return redirect('/login')  # 跳转自己的网址

    # 模板语法
    user_dict = {'username': 'zhangsan', 'age': 100}
    # 第一种传值方式:更加的精确 节省资源
    # return render(request, 'index.html', {'user_dict': user_dict})
    # 第二种传值方式:当你要传的数据特别多的时候
    """locals会将所有在名称空间所有的名字全部传递给html页面"""
    return render(request, 'index.html', locals())

def login(request):
    return HttpResponse('login')
# request对象方法:
request.method    # 返回请求方式 并且是全大写的字符串形式
request.POST  # 获取用户提交的post请求数据(不包含文件) < QueryDict: {'username': ['zs'], 'password': ['123']} >
    request.POST.get()    # 只获取列表最后一个元素
    request.POST.getlist()    # 直接将列表取出
request.GET  # 获取用户提交的get请求数据 get请求携带的数据的大小限制4kb左右而post请求则没有限制
    request.GET.get()    # 只获取列表最后一个元素
    request.GET.getlist()    # 直接将列表取出
request.FILES  # 获取文件数据
request.path  # /login/
request.path_info  # /login/
request.get_full_path()  # /login/?username=zhangsan/

# models操作数据库
models.User.objects.create(username=username, password=password)  # 增
models.User.objects.filter(id=delete_id).delete()  # 删
models.User.objects.filter(id=edit_id).update(username=username, password=password)  # 改
user_queryset = models.User.objects.all()  # 查
app01 import models
def login(request):
    if request.method == 'POST':
        # 获取用户提交的数据
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 查询数据库数据
        user_obj = models.User.objects.filter(username=username).first()  # select * from user where username='zero';
        # print(user_obj)  # <QueryDict: {'username': ['zero'], 'password': ['123']}>
        if user_obj:
            if password == user_obj.password:
                return HttpResponse("登录成功")
            else:
                return HttpResponse("密码错误")
        else:
            return HttpResponse("用户不存在")
    return render(request, 'login.html')
def reg(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 第一种方法:数据库的增加
        # 直接获取用户数据存入数据库
        # res = models.User.objects.create(username=username, password=password)
        # print(res, res.username, res.password)
        # 第二种方法:数据库的增加
        user_obj = models.User(username=username, password=password)
        user_obj.save()  # 保存数据
    return render(request, 'reg.html')
def userlist(request):
    # 查询出用户表里面的所有数据
    # 方式一
    # data = models.User.objects.filter()  # select * from user
    # print(data)
    # 方式二
    user_queryset = models.User.objects.all()

    return render(request, 'userlist.html', locals())
def edit_user(request):
    # 获取url问号后面的参数
    edit_id = request.GET.get('user_id')
    # 查询当前用户想要编辑的数据对象
    edit_obj = models.User.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 去数据库中修改对应的内容
        # 修改数据方式一
        models.User.objects.filter(id=edit_id).update(username=username, password=password)
        # 修改数据方式二
        # edit_obj.username = username
        # edit_obj.password = password
        # edit_obj.save()
        # 跳转到数据的展示页面
        return redirect('/userlist/')
    # 将数据对象展示到页面上
    return render(request, 'edit_user.html', locals())
def delete_user(request):
    # 获取用户想要删除的数据id值
    delete_id = request.GET.get('user_id')
    # 直接去数据库中找到对应的数据删除即可
    models.User.objects.filter(id=delete_id).delete()
    return redirect('/userlist/')

五、Django ORM models.py

"""
ROM:对象关系映射
作用:通过pythom面向对象的代码简单快捷的操作数据库
不足之处:封装程度太高 有时候sql语句的效率偏低 需要自己写SQL语句
数据库迁移命令:
    python manage.py makemigrations
    python manage.py migrate
创建项目命令:startapp app02
"""
from django.db import models

class User(models.Model):
    """
    创建模型表的时候如果主键字段名没有额外的叫法(默认id) 那么主键字段可以省略不写
    max_length:字段长度
    verbose_name:用来对字段的解释
    null=True:该字段可以为空
    default=18:默认值
    """
    username = models.CharField(max_length=32, verbose_name='用户名')  # username varchar(32)
    # password = models.IntegerField()  # password int
    # 字段的修改
    password = models.CharField(max_length=32)  # password int
    # 字段的增加
    age = models.IntegerField(default=18)
# 创建表关系
class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)  # 一对多 默认就是与Publish表的主键字段做外键关联 on_delete=models.CASCADE级联删除
    authors = models.ManyToManyField(to='Author')  # 多对多 ManyToManyField会自动创建第三张表

class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=32)

class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.CASCADE)  # 一对一

class AuthorDetail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=32)

六、templates

1.index.html

{{ user_dict }}    # 模板语法

{% load static %}    # 静态文件动态解析
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">

2.login.html

<h1 class="text-center">登录功能</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control"></p>
                <p>password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-success btn-block">
            </form>
        </div>
    </div>
</div>

3.reg.html

<h1 class="text-center">注册功能</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control"></p>
                <p>password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-danger btn-block">
            </form>
        </div>
    </div>
</div>

4.userlist

<h1 class="text-center">数据展示</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-striped table-hover">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>username</th>
                    <th>password</th>
                    <th>action</th>
                </tr>
                </thead>
                <tbody>
                {% for user_obj in user_queryset %}
                    <tr>
                        <td>{{ user_obj.id }}</td>
                        <td>{{ user_obj.username }}</td>
                        <td>{{ user_obj.password }}</td>
                        <td>
                            <a href="{% url 'xxx' %}?user_id={{ user_obj.id }}" class="btn btn-primary btn-xs">编辑</a>
                            <a href="/delete_user/?user_id={{ user_obj.id }}" class="btn btn-danger btn-xs">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>

5.edit_user.html

<h1 class="text-center">编辑功能</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control" value="{{ edit_obj.username }}"></p>
                <p>password:<input type="text" name="password" class="form-control" value="{{ edit_obj.password }}"></p>
                <input type="submit" class="btn btn-info btn-block" value="编辑">
            </form>
        </div>
    </div>
</div>

七、django请求生命周期流程图

Django之操作MySQL文章来源地址https://www.toymoban.com/news/detail-428737.html

到了这里,关于Django之操作MySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • django sqlite3操作和manage.py功能介绍

     参考链接:https://www.cnblogs.com/csd97/p/8432715.html manage.py 常用命令_python manage.py_追逐梦想的博客-CSDN博客 python django操作sqlite3_django sqlite_浪子仙迹的博客-CSDN博客

    2024年02月12日
    浏览(47)
  • Django操作MySQL数据库的优化方法

    Django 是一个很流行的 Web 框架,而 MySQL 是常用的关系型数据库之一。在使用 Django 开发 Web 应用时,我们经常需要使用 MySQL 存储数据,因此如何加速 MySQL 是我们需要关注的问题。本文将介绍一些方法来优化 Django 中 MySQL 的性能。 使用适当的索引 索引是 MySQL 中提高查询性能的

    2024年02月10日
    浏览(72)
  • Django学习笔记-HTML实现MySQL的读写操作

    1.创建model,模型以类形式存在,属性对应字段,未创建主键,默认创建整数自增主键 2.运行python manage.py makemigrations myApp01 查看需要映射 3.运行python manage.py migrate 执行映射,mysql中会自动创建表 4.index.html中添加一个form表单,请求路由地址save111,请求方式为post请求 5.urls.py中添加路由

    2024年02月21日
    浏览(37)
  • Django主要特点

    Django 是一个开源的 Python Web 开发框架,它提供了一系列的工具和功能,帮助开发人员快速、高效地构建 Web 应用程序。 以下是 Django 的一些主要特点: 1. 强大的 ORM(对象关系映射) : Django 提供了一个高级的 ORM,使开发人员可以使用 Python 代码而非 SQL 查询语言来操作数据库

    2024年02月11日
    浏览(35)
  • redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)

    1 redis其它操作 2 redis管道 3 django中使用redis 3.1 通用方案 3.2 第三方模块 4 django缓存 5 celery介绍 5.1 celery的快速使用

    2024年02月07日
    浏览(50)
  • Django容易被遗忘却无比重要的框架默认文件介绍及使用方法

    在Python Web开发领域,Django框架的地位犹如璀璨的明星,其全面、高效和安全的特性使其在全球范围内广受欢迎。本文将全面解析Django框架的默认文件,并深入探讨每个文件及其组成的意义和用途,透彻展示这个强大框架的文件结构和设计原理。 首先,让我们看一下创建一个

    2024年02月12日
    浏览(42)
  • MySQL数据库自动生成Models文件导入Django

    在Django项目使用数据库时,可以有三种方式:           1.直接编写app内的models文件,然后自动生成MySQL数据库          2.直接在MySQL中将数据库编写好,然后不使用models,而是在views中利用PyMySQL编写数据库链接等操作         3.MySQL库自动生成models文件进行连接使用 这

    2023年04月08日
    浏览(43)
  • Django学习记录:使用ORM操作MySQL数据库并完成数据的增删改查

    数据库操作 MySQL数据库+pymysql Django开发操作数据库更简单,内部提供了ORM框架。 安装第三方模块 ORM可以做的事: 1、创建、修改、删除数据库中的表(不用写SQL语句)。【无法创建数据库】 2、操作表中的数据(不用写SQL语句)。 1、自己创建数据库 1)启动MySQL服务 2)自带

    2024年02月14日
    浏览(63)
  • 【MySQL】MySQL 数据库的介绍与操作

    目录 1. 登录 MySQL 数据库 2. MySQL 介绍 3. 操作数据库 1、创建数据库 2、删除数据库 3、插入数据 4、查找 5、修改数据库 4. 表的操作 1、创建表 2、查看表 3、修改表 4、删除表 写在最后: 指令: 这里我来介绍一下他的选项,-h 表示指明登录部署 MySQL 服务的主机,-P 表示我们要

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包