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请求生命周期流程图

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django操作MySQL数据库需要进行以下几个步骤: 1. 安装MySQL驱动:首先,确保您已经安装了MySQL数据库,并且可以访问它。然后,您需要安装DjangoMySQL驱动,可以使用`pip`命令安装`mysqlclient`或`pymysql`。 2. 配置数据库:在Django项目的设置文件(settings.py)中,找到`DATABASES`设置项,并进行以下配置: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'your_database_name', 'USER': 'your_username', 'PASSWORD': 'your_password', 'HOST': 'your_host', 'PORT': 'your_port', } } ``` 替换上述配置项中的`your_database_name`、`your_username`、`your_password`、`your_host`和`your_port`为您的MySQL数据库的实际信息。 3. 迁移数据库:在项目根目录下运行以下命令,创建数据库表格: ``` python manage.py makemigrations python manage.py migrate ``` 4. 定义模型:在Django中,您需要定义模型来表示数据库中的表格。在应用的models.py文件中,创建相应的模型类,定义表格的结构和字段。 5. 进行数据库操作:使用Django的ORM(对象关系映射)进行数据库操作。您可以使用模型类的方法来创建、读取、更新和删除数据,例如: ```python # 创建对象 obj = MyModel(field1='value1', field2='value2') obj.save() # 读取对象 objs = MyModel.objects.all() obj = MyModel.objects.get(id=1) # 更新对象 obj.field1 = 'new value' obj.save() # 删除对象 obj.delete() ``` 这是一个简单示例,您可以根据实际需求使用更多高级查询和操作方法。 希望这些步骤能够帮助您在Django中成功操作MySQL数据库。如果您需要更详细的指导,请查阅Django官方文档或其他相关资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值