Django初识前后端交互

Django初识前后端交互(含MySQL)

目录

  • Django初识前后端交互(含MySQL)
    • request方法
    • 示例
    • 连接数据库
    • Django ORM
      • 在models.py中建表
        • 允许为空
        • 指定默认值
      • 数据库迁移命令
      • 数据的增删改查
        • 数据的增加
        • 数据的查询
          • 查询所有数据
          • 查询单个数据(对象)
          • 查询单个数据的所有信息
          • 查询某条数据的某个信息,键值对
          • 判断某个数据是否存在
          • 查询第一条数据
          • 查询最后一条数据
          • 查询多条个字段的所有数据(键值对)
        • 数据的删除
        • 数据的更改

首先把settings文件中的中间件注释掉,否则在post请求时会报错

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

request方法

request方法用于views.py中对web页面执行各种操作

  • request.method:获取请求方式(GET/POST)
  • request.POST:获取form表单中用户输入内容,不包含文件
  • request.get:与POST请求相同,但是列表元素只能获取最后一位
  • request.getlist:获取列表所有元素

示例

先来一个简单的登录模态框

image-20240227210056738

原码如下

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!--    引入jQuery--><script src="{% static 'js/jquery.js' %}"></script><!--    引入Bootstrap的CSS文件--><link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet"><!--    引入Bootstrap的JavaScript文件--><script src="{% static 'js/bootstrap.js' %}"></script><style>.row {background-color: white;height: 50px;}.col-md-1 {text-align: center;font-size: 34px;}#logo1 {font-family: "幼圆", Arial, sans-serif;color: black;}body {background-color: dimgrey;}.btn-default {border: none;font-size: 20px;}.login-one {font-size: 21px;}</style>
</head>
<body>
<div class="row"><div class="col-md-1 logo"><a href="" target="_parent" id="logo1">博客园</a></div><div class="col-md-1 login"><!-- 登录按钮 --><button type="button" class="btn btn-default btn-lg" data-toggle="modal" data-target="#myModal" id="login1">登录</button><!-- 登录模态框 --><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><spanaria-hidden="true">&times;</span></button></div><div class="modal-body"><form action="" method="get"><div class="form-group"><label for="username" class="login-one">用户名</label><br><input type="text" class="form-control" id="username" placeholder="Username"name="username"><br></div><div class="form-group"><label for="pwd" class="login-one">密码</label><br><input type="password" class="form-control" id="pwd" placeholder="Password"name="password"><br></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">返回</button><button type="submit" class="btn btn-primary" id="login2">登录</button></div></form></div></div></div><div class="modal-dialog" role="document"></div></div></div><div class="col-md-1 register"><button onclick="location.href=/register" class="btn btn-default" id="r1">注册</button></div><div class="col-md-1 col-md-offset-8"><div class="dropdown"><button class="btn btn-default dropdown-toggle" type="button" id="setting" data-toggle="0"aria-haspopup="true" aria-expanded="true">游客<span class="caret"></span></button><ul class="dropdown-menu" aria-labelledby="setting"><li><a href="#" class="menu">个人信息</a></li><li><a href="#" class="menu">文章管理</a></li></ul></div></div>
</div>
</body>
</html>

后端:

def home(request):response = render(request, 'blog.html')data = request.GETprint(data)username = data.get("username")password = data.get("password")print(username, password)return response

输入表单然后提交

image-20240227215125527

成功拿到数据

连接数据库

这是Django默认的数据库

DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}

修改为我们需要的配置

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mydj','USER': 'root','PASSWORD': '7997','HOST': '127.0.0.1','PORT': 3306,'CHARSET': 'utf8',}
}

django 默认使用mysqldb模块链接mysql

但是该模块的兼容性不好,需要手动修改为pymysql链接

在项目下的init或者任意的应用名下的init文件中书写一下代码

  • init.py
import pymysqlpymysql.install_as_MySQLdb()

Django ORM

在models.py中建表

id字段Django会自动帮忙创建

from django.db import models# Create your models here.
class User(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)
允许为空
class MyModel(models.Model):name = models.CharField(max_length=50, null=True)  # 允许name字段为空
指定默认值
class MyModel(models.Model):age = models.IntegerField(default=18)  # 默认年龄为18岁

数据库迁移命令

  1. 创建操作记录

    • python manage.py makemigrations
      

      操作完后Django会自动在migrations目录下生成sql语句文件

      image-20240227220941361

  2. 同步到数据库

    • python manage.py migrate

image-20240227221100284

等待表创建完毕

image-20240227221134422

这样就是成功执行建表语句了

删除字段只要在models中删除对应的字段行,然后重新makemigrations即可生成新的sql语句

数据的增删改查

数据的增加

直接进入views.py将获取的数据上传到sql类对象

def home(request):sql = user.objects.create(username=username,password=pwd)sql.save()return response

image-20240227222418253

上传成功~

数据的查询
查询所有数据
from app01.models import userdef home(request):# 查询全部数据all_data = user.objects.all().values()return response
查询单个数据(对象)
username = user.objects.filter(username='admin')
# 结果:<QuerySet [<user: user object (1)>, <user: user object (2)>, <user: user object (3)>, <user: user object (4)>, <user: user object (5)>]>
查询单个数据的所有信息
# date:list属性
username = user.objects.filter(username='admin').values()[0]
# 结果:{'id': 1, 'username': 'admin', 'password': '123', 'up_time': datetime.datetime(2024, 2, 28, 9, 29, 46, 516523, tzinfo=<UTC>)}
查询某条数据的某个信息,键值对
data = user.objects.filter(username='admin').values('username')[0]
# 结果:{'username': 'admin'}
判断某个数据是否存在
login_state = user.objects.filter(username=username, password=password).exists()
# 不存在返回False
查询第一条数据
user.objects.first()
查询最后一条数据
qry = user.objects.all()[-1]
查询多条个字段的所有数据(键值对)
user_pwd = user.objects.all().only('username','password').values_list('username','password')
# 结果:<QuerySet [('admin', '123'),('999', '999')]>
数据的删除
from app01.models import user
def home(request):user.objects.filter('username'='张三').delete()
数据的更改
user.objects.filter('username'='张三').update('username'='李四')

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++记录

常用快捷键&#xff1a; CTRL -向后定位 CTRL SHIFT -向前定位 1.注释&#xff1a;CTRLKC 2.取消注释&#xff1a;CTRLKU 11.调试(启动)&#xff1a;F5 20.查找&#xff1a;CTRLF 21.替换&#xff1a;CTRLH 31.跳转到指定的某一行 1)方法1&#xff1a;组合键“CtrlG…

【LeetCode】876_链表的中间结点_C

题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 https://leetcode.cn/problems/middle-of-the-linked-list/description/ 示例 提示&#xff1a; 链表的结点数范围是 [1, 100]1 <…

Flink SQL 中的流式概念:状态算子

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

疲劳驾驶监测报警摄像机

疲劳驾驶是导致交通事故的重要原因之一&#xff0c;为了提高驾驶安全性&#xff0c;科技日新月异&#xff0c;疲劳驾驶监测报警摄像机因其先进的技术而成为关注焦点。 疲劳驾驶监测报警摄像机采用先进的人脸识别技术和人工智能算法&#xff0c;能够实时监测驾驶员的状态。通过对…

Jmeter分布式部署

前期准备&#xff1a; 1. 控制机一台&#xff0c;代理机一台&#xff0c;Jmeter安装包 操作步骤&#xff1a; 1. Linux安装Jmeter&#xff08;windows安装教程自己搜一下&#xff09; 1.1创建一个单独的文件夹(jmeter)&#xff0c;用来存放Jmeter的安装包 mkdir jmeter 1.2…

Git源码管理

参考视频&#xff1a;16-git的日志以及版本管理_哔哩哔哩_bilibili 参考博客&#xff1a;Git && Docker 学习笔记-CSDN博客 目录 简介 个人操作初始化 初始化git目录 查看生成的git目录文件 配置git工作目录的用户信息 查看工作区的状态&#xff0c;生成文件的…

Vue2:路由history模式的项目部署后页面刷新404问题处理

一、问题描述 我们把Vue项目的路由模式&#xff0c;设置成history 然后&#xff0c;build 并把dist中的代码部署到nodeexpress服务中 访问页面后&#xff0c;刷新页面报404问题 二、原因分析 server.js文件 会发现&#xff0c;文件中配置的路径没有Vue项目中对应的路径 所以…

5GC SBA架构

协议标准&#xff1a;Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择&#xff0c;根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…

鸿蒙学习day1基础语法 基础变量类型

在这里插入图片描述 什么是变量&#xff1a;变量就是一些数据 如125&#xff0c;‘字符串数据’ 通过一个符号来表示 变量的定义 方法 let 变量名&#xff1a;变量类型 ’ 各种数据’ ,let是关键字&#xff0c;系统给的用来定义变量的 let name: string 张亚洲; let age: …

Xcode15与苹果ios17适配以及遇到的问题

大家好&#xff0c;我是你们的好朋友咕噜铁蛋&#xff01;最近&#xff0c;苹果发布了全新的iOS17系统&#xff0c;而作为开发者&#xff0c;我们需要确保我们的应用程序能够与这个新系统完美适配。因此&#xff0c;今天我将和大家分享一些关于Xcode15与苹果17系统适配的经验&a…

Android修行手册-Chaquopy中opencv、numpy的初步应用

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

leetcode刷题(javaScript)——链表相关场景题总结

链表中的元素在内存中不是顺序存储的&#xff0c;而是通过next指针联系在一起的。常见的链表有单向链表、双向链表、环形链表等 在 JavaScript 刷题中涉及链表的算法有很多&#xff0c;常见的包括&#xff1a; 1. 遍历链表&#xff1a;从头到尾遍历链表&#xff0c;处理每个节点…