zoukankan      html  css  js  c++  java
  • Django --- 与数据库进行交互

    1.静态文件配置

    默认情况下所有的html文件都是放在template文件夹内

    1.什么是静态文件

    静态就是提前已经写好了,网站中所使用到的提前写的css,js,第三方的前端模块,图片 都叫做静态资源

    默认情况下网站所用到的静态文件资源全部都会放在static文件夹下,

    通常情况下,在static文件夹内布还会再建其他文件夹

    css 文件夹

    js 文件夹

    font 文件夹

    img 文件夹

    Bootstap

    fontawesome

    为了更加方便的管理文件

    django中给需要自己创建static文件夹,新建在project文件下

    视图函数都必须有返回值,返回的都是HttpResponse对象

    2.为什么用户在浏览器中输入的网址能够访问到响应的资源?有时候不能访问?

    能访问到相应资源的前提是后端提前开设该资源的访问,如果我的后端没有开设相关的资源,用户是无法访问到的

    3.如果想要访问静态资源怎么做?

    对后端的相关资源进行开放,.如果想要访问静态资源,必须去ursl里面开设对应的接口,但是如果需要进行访问的静态资源很多,一个一个修改太麻烦了,所以可以直接在django的settings配置文件中进行配置,之后重启django,如果还是没有效果,清除一下页面缓存。

    STATIC_URL = '/static/'①  
    static:指的是访问静态文件资源接口前缀
    STATIC_URL:静态网址
    

    4.手动开设静态文件访问资源

    STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]②
    staticfiles_dirs:静态文件目录
    

    5.关于两个static的联系

    1.①指的是访问静态文件资源接口前缀,②指的是静态资源所在的文件夹路径

    2.接口前缀的意义:如果你想访问我的静态资源,你就必须要按照我写的 ①接口前缀(STATIC_URL)内容开始,如果你的是按照我的接口前缀开始的,就让你在 ②静态文件目录(STATICFILES_DIRS)中寻找你需要的静态文件,②中的static表示的是你可以寻找静态资源的路径。

    注意:

    1.在写需要访问的静态资源的时候,必须精确到具体的文件,否则无法访问。

    2.②中的static可以也可以使用别的文件,寻找的时候按照从上向下的顺序来查找需要的静态文件。

    3.①中的static跟文件夹路径没有一点关系

    6.如果想要更改很多个接口前缀,使用什么方法?

    静态文件的动态绑定:

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

    此时不管我的接口前缀怎么更改,我都可以跟html中需要查询静态文件的开始部分对应上,不用再一个一个进行更改。

    2.get请求和post请求

    1.from表单

    action=" "

    1.不写参数,默认朝当前地址提交数据

    2.只写后缀,后缀指的是端口后边的部分

    3.写全路径

    mothod:POST/GET

    enctype="multipart/form-data" 提交文件

    2.get请求

    from表单默认是get请求,可以携带参数

    特点:url/?xxx=xxx&yyy=yyy

    1.携带的数据不安全

    2.携带的数据大小是有限制的,最大在4k左右

    3.通常只会携带一些不是很重要的数据

    4.GET参数通过URL传递,POST放在Request body中

    3.注意点:

    在向后端提交POST请求的时候,如果出现403报错,进行下边的操作

    MIDDLEWARE = [# 'django.middleware.csrf.CsrfViewMiddleware',]
        
    # 将这一行注释掉,  MIDDLEWARE:中间件
    

    djanjo后端的视图函数默认使用的是GET请求,无论是发GET请求还是POST请求,都会执行视图函数

    GET请求:向服务器要资源,请求指向拿到login页面

    POST请求:向服务器提交数据,请求想提交数据,然后后端做校验

    3.request方法初始

    request.mothed          # 获取请求方式,并且纯大写的字符串
    
    **************************
    request.POST            # 获取用户提交的post请求数据
    # 获取用户数据
    request.POST.get()      # 默认只会获取列表最后一个元素
    request.POST.getlist()  # 按照列表的行式返回
    
    **************************
    request.GET             # 获取用户提交的get数据
    # 获取用户数据
    request.GET.get()       # 默认只会获取最后一个元素
    request.GET.getlist()   # 按照列表行式返回
    

    4.pycharm连接数据库

    连接的时候必须有的两步操作

    1.配置文件配置

    DATABASES = {
        'default': {
    	'ENGINE': 'django.db.backends.mysql',  # 指定数据库类型
    	'NAME': 'day49',  # 指定库的名字
    	'USER':'root',  # 注意 键必须是全大写
    	'PASSWORD':'123qwe',
    	'HOST':'127.0.0.1',
    	'PORT':3306,
    	'CHARSET':'utf8'
    	}}
    

    2.主动告诉django,不要使用默认的mysqldb连接,而是用pymysql

    1.可以在项目名下的__init__.py中书写
    2.也可以在应用名下的__init__.py中书写
    
    import pymysql
    pymysql.install_as_MySQLdb()
    
    

    5.django连接Mysql

    6.django ORM简介

    ORM:对象关系映射
    类          表
    对象        字段数据
    对象.属性    字段对应的值
    
    

    1.为什么使用orm

    能够让不会数据库操作的人也能够简单方便的去操作数据库

    2.ORM缺点

    封装程度太高,有时候会出现查询效率偏低的问题

    3.django中如何操作ORM

    书写模型类

    去应用下的model.py中书写模型类(就是类)

    ********
    #注意点:之后在写django项目中,一个djanjo就对应一个数据库,不要出现多个项目使用同一个数据的情况
    
    

    4.ORM的使用

    创建表

    # 注意点:
    # 1.django会自动帮你创建一个主键,默认是id,如果自己指定了主键,会使用自己指定的
    # 2.django中默认没有char字段,但是支持用户自定义
    # 3.CharField必须有max_length参数
    
    from django.db import models
    class User(models.Model):
        id = models.AutoField(primary_key=True) 
        username = models.CharField(max_length=255)
        password = models.CharField(max_length=32)
    
    

    数据库迁移命令

    ****************************************************************************
    >>> python manage.py makemigrations   # 将数据库中的修改记录到(migration文件内)
    # 执行完之后,不会直接同步到数据库中,
    
    >>> python manage.py migrate          # 将表在数据库中进行创建
    
    

    只要修改了models里面跟数据库相关的代码,就必须重新执行上面的两条命令

    7.模型表字段的增删改查

    # 改:直接更改表中的内容,再进行数据库迁移的两条命令
    
    # 增:
    # 方式1:设置默认值
    email = models.EmailField(default='123@qq.com')
    # 方式2:允许字段为空
    phone = models.BigIntegerField(null=True)
    # 方式3:直接在提示中给默认值
    gender = models.CharField(max_length=32)
    
    # 删:将表重新更新一下,再执行库迁移的两条命令
    
    

    切记:进行数据库信息更改的时候,一定要注意不要弄错了,更改的时候一定要小心小心再小心

    8.模型表数据的增删改查

    模型表数据的增删改查(******)
       查
       	data = models.User.objects.filter(username=username)  # <QuerySet [<User: User object>]>
       	"""
       	filter返回的结果是一个"列表",里面才是真正数据对象
       	filer括号内可以放多个关键字参数 这多个关键字参数在查询的时候 是and关系
       	"""
       	user_list = models.User.objects.all()  # models.User.objects.filter()
       	"""
       	结果是一个"列表" 里面是一个个的数据对象
       	"""
       增
       	user_obj = models.User.objects.create(username=username,password=password)
           print(user_obj,user_obj.username,user_obj.password)
       	# create方法会有一个返回值  返回值就是当前被创建的对象本身
       	
       改
       	models.User.objects.filter(id=edit_id).update(username=username,password=password)
           """
           批量操作  会将filter查询出来的列表中所有的对象全部更新
           """
       
       删(一般情况下不会使用)
       	models.User.objects.filter(id=delete_id).delete()
       	"""
       		批量操作  会将filter查询出来的列表中所有的对象全部删除
    
    
  • 相关阅读:
    Elasticsearch崩溃解决办法
    阿里云服务器ubuntu14.04安装Redis
    error: command ‘x86_64-linux-gnu-gcc’ failed with exit status 1
    本机访问阿里云服务器上的Elasticsearch
    阿里云服务器配置ElasticSearch
    ElasticSearch-RTF的安装
    【已解决】neo4j-import使用过程中遇到的问题(there's a field starting with a quote and whereas it ends that quote there seems to be characters in that field /Executor has been shut down in panic)
    OutOfMemoryError和StackOverflowError
    线程的终止
    scala基础
  • 原文地址:https://www.cnblogs.com/whkzm/p/11923787.html
Copyright © 2011-2022 走看看