zoukankan      html  css  js  c++  java
  • Django操作数据库

    实现Django增删改查功能

    静态文件

    网站所使用的提前已经写好了的文件就是静态文件

    比如:CSS、JS、第三方的组件(bootstrap、sweetalert、fontawesome)

    网站所用到的HTML文件统一放到templates文件夹中

    针对网站所使用到的静态文件存储在一个static文件夹中(该文件需要自己手动创建)

    static
    	CSS		网站所用到的所有的CSS文件
        JS		网站所用到的所有的JS文件
        image	网站所用到的所有的图片文件
        第三方文件
    

    用户在浏览器窗口之所以输入网址能够拿到对应的资源是因为后端开设了相关的资源

    在这里又有了一个Django静态文件配置


    Django静态文件配置

    Django在配置文件中暴露了配置文件的配置信息,只需要按照固定的写法书写即可

    • settings中找到STATIC_URL = '/static/'书写一下代码即可

    基本配置

    STATIC_URL = '/static/' # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),	# 文件夹的路径
        os.path.join(BASE_DIR, 'static1')
    ]	# 可以放多个
    

    当接口前缀正确之后,会拿着后面的路径依次去下面列表中的每一个文件夹下查找对应的资源,顺序是从上往下依次查找,如果都没有找到才会报错

    • 问题:接口前缀名更改的话,写过的所有页面都需更改

    • 解决:动态绑定

    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
    

    form表单

    默认是以get请求提交数据的

    提交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',
    ]
    

    视图函数应该针对不同的请求,做出不同的处理逻辑

    • get请求来,应该返回一个HTML页面
    • post请求来,应该获取用户提交的数据,进行进一步处理

    判断当前请求是什么请求(获取前端请求方式)

    request.method  # 结果是一个纯大写的字符串  GET/POST
    
    request.POST  # 获取post请求提交的数据 类似于是一个大字典
    print(request.POST)
    <QueryDict: {'username': ['yang'], 'password': ['123']}>
    request.POST.get()		# 只会取列表的最后一个元素
    request.POST.getlist()	# 取出整个列表
    
    request.GET	# 获取符合get请求携带数据格式的数据
    request.GET.get()		# 只会取列表的最后一个元素
    request.GET.getlist()	# 取出整个列表
    

    一般情况下get请求次数要远远多于post请求,所以我们要针对post请求做出逻辑判断,将get请求直接写在函数体内而不做判断

    def login(request):
        # 给用户返回一个登陆页面
        # 获取前端请求方式
        if request.method == 'POST':
            return HttpResponse('收到了 小宝贝')
        return render(request, 'login.html')
    

    pycharm连接MySQL

    需要自己提前创建好对应的库

    注意:如果连接不上,切换驱动重新测试


    Django连接MySQL

    需要自己提前创建好对应的库

    1. 先去配置文件中配置相关参数
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 数据库类别,默认是sqlite3,需要改为我们自己的数据库类别
            'NAME': 'test',  # 库的名字
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '123',
            'CHARSET': 'utf8'
        }
    }
    
    1. 在项目名或者应用名目录下的__init__文件中,声明Django使用pymysql连接数据库,因为他默认是用mysqldb
    import pymysql
    pymysql.install_as_MySQLdb()
    

    Django orm 简介

    Django orm 只能帮我们创建表,而不能创建库

    orm就是对象关系映射

    对象 记录
    属性 字段值

    作用:能够通过Python面向对象的语法,句点符来简单快捷的操作数据

    首先还是需要先去对应的应用下models.py中书写模型类(模型表)

    models.py

    class User(models.Model):
        id = models.AutoField(primary_key=True)	# 相当于主键自增
        username = models.CharField(max_length=64)# 相当于varchar
        password = models.CharField(max_length=32)
    

    ★数据库迁移(同步)命令★

    将数据库的改动记录到migrations文件夹

    python3 manage.py makemigrations
    

    将改动真正的同步到数据库中

    python3 manage.py migrate
    

    只要改动了models.py中跟数据库相关的代码,就必须重新执行上面的两条命令来保证数据库与models.py一致

    如果你没有指定主键的时候,Django orm会自动创建一个名为id的主键字段


    Django 操作数据库

    字段的增删改查

    1.在User类中直接添加一个字段,设置一个默认值
    email = models.EmailField(default='exampl@qq.com')
    2.添加一个字段默认为空
    hobby = models.CharField(null=True, max_length=64)
    之后执行数据库迁移命令即可
    

    连接后直接就可以看到

    password字段max_length原本是32

    password = models.CharField(max_length=64)
    之后执行数据库迁移命令即可
    
    只要注释掉对应的字段 执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)
    

    数据的增删改查

    1.filter():
    from app01 import models
    res = models.User.objects.filter(username='yang') # 相当于select * from user where username='yang'
    # 返回的结果是一个列表,支持索引取值,不支持负数,推荐使用.first()
    user_obj = res.first()
    # filter方法条件不存在的时候 不会报错返回的是一个空列表
    2.查所有的数据
    	filter()括号内不写参数
        all()	查询所有数据
    

    filter括号内可以放多个关键字参数,并且多个关键字参数之间是and关系

    1.create()
    user_obj = models.User.objects.create(username=username, password=password)
    # 该方法有返回值,返回值就是当前被创建的对象本身
    2.对象的绑定方法
    user_obj = models.User(username=username, password=password)
    user_obj.save()
    

    获取用户想要删除的数据id

    delete_id = request.GET.get('delete_id')
    models.User.objects.filter(id=delete_id).delete()
    # 将filter过滤出来的数据全部删除   批量删除
    

    获取用户想要修改的数据id
    根据数据id获取数据并且展示到前端页面供用户查看

    # 方式一
    models.User.objects.filter(id=edit_id).update(username=username, password=password)
    # 方式二
    # 获取数据对象
    edit_obj = models.User.objects.filter(id=edit_id).first()
    # 修改对象属性
    edit_obj.username = username
    edit_obj.password = password
    # 调用对象绑定方法保存
    edit_obj.save()
    
  • 相关阅读:
    java 网络编程入门
    正确、安全地停止SpringBoot应用服务
    spring boot application.properties文件外部配置
    logback
    基本排序算法的总结
    jqury属性操作,特殊效果
    click事件和jquery选项卡
    jquery加载方式,选择器,样式操作
    css之定位
    css中设置background属性
  • 原文地址:https://www.cnblogs.com/YGZICO/p/12198709.html
Copyright © 2011-2022 走看看