Django链接数据库 增删改查/配置

Django静态文件配置

服务端需要生成HTML文件,需要一些额外的CSS,JS代码文件以及img图片等,还有一些脚本帮助我们渲染网页页面,在Django中我们可以把这些文件统称为静态文件。

我们需要把这些文件统一收集起来 方便管理。

根目录下面创建 static目录,把所有的静态文件统一放入该目录中。

如果 static目录中文件过多 也可以再次划分 通过文件格式

css目录/js目录/img目录/libs目录(其他脚本插件等)

解耦合更加方便管理

默认文件资源是无法直接访问的 需要我们开发静态文件资源访问接口

静态文件相关配置

创建完static目录后 需要在settings配置文件中设置

STATIC_URL = '/static/'

STATICFILES_DIRS = [  os.path.join(BASE_DIR, 'static')  ]
# 即静态文件存放在 BASE_DIR/static 下(和manage.py同级目录下)


STATICFILES_DIRS = [  os.path.join(BASE_DIR, 'static'),
             os.path.join(BASE_DIR, 'static001')             ]
'''
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回
'''


接口前缀

STATIC_URL = '/static/'

# STATIC_URL的作用是用于拼接静态文件的存储路径。访问静态文件资源的接口前缀 通行证.这个可以自定义 不一定要命名'/static/'

动态解析接口前缀

<link rel="stylesheet" href="../static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
静态获取接口前缀



动态获取接口前缀
关键词 {% load static %}
  
{% load static %}

<link rel="stylesheet" href="{% static "/bootstrap-3.4.1-dist/css/bootstrap.min.css" %}">
<script src ="{%static'bootstrap3.4.1dist/js/bootstrap.min.js' %}"></script>
 
 先引入设置 {% load static %}
 然后连接的时候接口前缀直接填写 {% static /文件地址 %} 

form表单

From表单默认是get请求方式,提交数据需要改为post请求

from表单 action参数

<from action=' '></from>
// action参数不设置 默认提交给当前页面所在的地址
<from action='https://www.baidu.com'></from>
// 填写完整地址提交  绝对路径
<from action='/login/'></from>
// 只写后缀,提交到当前项目的页面地址 相对路径

from表单 method参数

<from action=''></from>
// method参数不设置 默认是get请求方式 


<from action='' method = 'post'></from>
// 改为 post请求方式  


请求方法补充:
    get
       朝服务器索要数据 也可以携带一些额外的要求
       携带额外数据的方式  URL?name=123&uuu=xxx
       额外携带的数据不能太大 最好小于2kb
        
    post:
       朝服务器提交数据
       携带额外数据的方式:请求体
       请求体携带数据安全性较高 且没有大小限制



request对象方法初始

获取用户提交数据

request.method
# 返回请求方式 并且是全大写 GET 或者 POST

request.POST
#获取post请求体里面携带的所有数据
#{name:['moon'],password:['212333'],hobby:['111','222','333']}

request.POST.get('name')
//获取到请求体里面的数据 默认获取数据列表中最后一个元素
//moon

request.POST.getlist('hobby')
//获取请求体里面的数据 获取数据列表
//['111','222','333']




def login(request):
    if request.method == 'POST':
        return HttpResponse('收到')
    return render(request,'login.html')
  # 通过这个方法可以区分是 get请求 还是post请求
  
  
  def login(request):
    if request.method == 'POST':
      #先判断请求方式
        if request.POST.get('username') == '123':
          #在接收请求体数据 获取具体数据潘丹
             return HttpResponse('登录成功')
        return HttpResponse('收到')
    render(request,'login.html')

获取用户提交的get请求数据

request.GET
#获取get请求体里面携带的所有数据
#{addr:['shanghai']}

request.GET.get()
//获取到请求体里面的数据 默认获取数据列表中最后一个元素
//shanghai


request.GET.getlist()
//获取请求体里面的数据 获取数据列表
//['shanghai']


Django链接mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 在settngs文件中 默认链接的是 'db.sqlite3'数据库 但是我们不需要


django链接mysql

第一步: 更改默认配置 链接mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db1',
         # 链接的库名
        'USER':'moongod',
        'PASSWORD':'123',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'CHARSET':'utf8'
    }
}


第二步:django默认用的是 mysqldb模块链接,导致报错
       更改默认链接模块 为 pymysql
       在同项目中的__init__py文件中插入代码
       
       import pymysql
       pymysql.install_as_MySQLdb()
       # 将pymysql代替mysqldb
        

补充:mac苹果笔记本如果出现 str编码错误 去报错行把 decode 改为 encode即可

Django操控mysql

Django ORM

'''
什么是orm,可以让不会sql语句的人也可以直接用面向对象的代码 简单快捷的操作
数据库
缺点:封装程度太高,执行速度没有sql语句快

创建类  =  创建表

类产生对象   =  表添加记录

对象属性   =   记录里的字段对应的值
'''


 
应用在models.py文件下 在这个文件中编写关于数据库的代码

class l1(models.Model):
    # 创建一张表 名为 l1
    lid = models.AutoField(primary_key=True)
    # 设置 字段 lid 类型为 自增 和 主键
    name = models.CharField(max_length=18)
    # 设置 字段 name 类型为 char(18)
    password = models.IntegerField()
    # 设置 字段 password 类型 为 int

这样就创建了一张表 


!!!!!!! 然后必须要进行数据库迁移命令才可以生效!!!!!

在pycharm Terminal 命令行输入

python3.8 manage.py makemigrations
# 将操作记录记录在(migrate)文件夹内

python3.8 manage.py migrate
# 将操作通过到数据库中

这样就通过django 创建好了一张表


只要改了models.py 里面数据库的任何数据 都需要在执行一次
python3.8 manage.py makemigrations
python3.8 manage.py migrate
才可以生效


makemigrations
在django创建表时 如果不设置主键字段 
ORM会默认生成一个字典id 作为主键并具有自增功能 

Snipaste_2022-12-09_20-19-20

django操控mysql增删改查

表字段的增删改查

表字段的增

表中增加字段:
直接在models.py文件中直接在生成表的类里添加字段
然后在执行 提交数据
python3.8 manage.py makemigrations 
和确认数据迁移
Python3.8 manage.py migrate

表中已有数据后 在设置的新字段
新增字段 可以为空 或 给新增字段 设置默认值
这样才可以新增

表字段的改

表中改字段的类型 名字等:
直接在models.py文件中直接在生成表的类里更改字段
然后在执行 提交数据
python3.8 manage.py makemigrations
和确认数据迁移
python3.8 manage.py migrate

表字段的删

表中删字段:
直接在models.py文件中直接在生成表的类里删除对应字段
然后在执行 提交数据
python3.8 manage.py makemigrations
和确认数据迁移
python3.8 manage.py migrate

风险:确认迁移后对应字段的数据也就全部没有了
每次执行迁移命令前都要检查自己的代码

数据的增删改查

数据的查

username = request.POST.get('username')# 通过接收post请求,获取前端传的值
password = request.POST.get('password')
# 通过接收post请求,获取前端传的值
from app01 import models
# 把这个功能的models文件导过来

res = models.l1.objects.filter(name=username)
# 使用models文件查询对应表类 filter过滤条件为 字段name的值 = 前端输入的值
# 等同于sql语句:select * from l1 where name = 'moon'

拿到res res = <QuerySet [<User object>]>
# 大概是一个列表 里面里面有一个对象,或者多个

user_obj = res[0] 
# 通过索引去值 把数据对象拿出来
# 不支持负数索引


方式二:
   user_obj = models.表名.object.filter(username = username).first()
 # 直接拿到数据对象



user_obj.name
user_obj.password
这样就可以直接通过点的方式拿到表格内的数据

数据的增

username = request.POST.get('username')# 通过接收post请求,获取前端传的值
password = request.POST.get('password')
# 通过接收post请求,获取前端传的值

from app01 import models
# 把这个功能的models文件导过来

方式一:
res = models.l1.objects.create(username=username,password=password)

models.l1.objects.create
# 新增数据语法
# 针对表l1 新增对象 (字段名=字段值)



方式二:

user_obj = models.l1(username=username,password=password)
# 针对l1表的类 生成一个新的对象
user_obj.save()
# 保存对象 = 相当于给表里添加数据
posted @   Python-moon  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示