• django基础之orm


    静态文件

    什么是静态文件

    网站所使用到的提前已经写好的文件
    
    css
    js
    第三方文件
    bootstrap
    sweetalert
    fontawesome
    	都称为静态文件
    

    注意:

    网站所使用到的html 文件统一放到templates 文件夹中
    那针对网站所使用到的静态文件也应该单独找一个文件夹来存储
    	这个文件夹 默认情况下都叫static
    	该文件夹需要手动自己创建
    	并且该文件夹内部通常是以下结构
        static
    		-css
    			网站所用到的所有的css文件
    		-js
    			网站所用到的所有的js文件
    		-image
    			网站所用到的所有的图片文件
    		第三方文件
            
    Static files (CSS, JavaScript, Images)
    https://docs.djangoproject.com/en/1.11/howto/static-files/
    
    STATIC_URL = '/static/'  # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
    
    用户在浏览器接口之所以输入网址能够拿到对应的资源,是因为后端开设了相关的资源
    

    django静态文件配置

    django静态文件配置

    django 在配置文件中给你显示了配置文件的配置信息,你只需要按照固定的写法书写
    即可显示对应的静态文件资源。
    

    基本配置

    STATIC_URL = '/static/'  # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
    """
    <link rel="stylesheet" href="/xxx/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    你要想访问后端的静态资源 你必须以接口前缀开头 后面跟上具体的文件路径 才能够访问到对应的资源
    
    当你的接口前缀正确之后  会拿着后面的路径依次去下面列表中的每一个文件夹下查找对应的资源
    顺序是从上往下依次查找 如果都没有找到才会报错
    """
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),  # 这里的static才是你文件夹的路径
        os.path.join(BASE_DIR, 'static1'),
        os.path.join(BASE_DIR, 'static2'),
    ]
    

    添加对应的资源

    1578128396476

    两者必须一一对应

    1578104401992

    添加后的执行顺序

    1578104598836

    如何解决动态绑定的问题

    {% 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>
    

    1578104942582

    form表单

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

    http://127.0.0.1:8000/login/?username=admin&password=123
    

    action的使用

    1.不写 默认朝当前地址提交数据
    2.全路径
    3.后缀(/index)
    
    

    提交post需注意

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

    1578129532037

    1578105562053

    get和post的请求

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

    eg:
    	get请求来 应该只需要返回一个html文件
    	post请求来 应该获取用户提交的数据 然后做进一步处理
    	注意:
    你必须要能够判断出当前请求到底是什么请求
    
    

    request对象

    获取前端请求方式

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

    get和post的两种逻辑判断方式

    def login(request):
    		# 要给用户返回一个登陆页面
    		# print('我被触发了')
    		# 获取前端请求方式
    		# if request.method == 'GET':
    		#     # get逻辑
    		#     return render(request, 'login.html')
    		# elif request.method == 'POST':
    		#     # post逻辑
    		#     # print(request.method,type(request.method))  # GET <class 'str'>  POST <class 'str'>
    		#     # 获取数据 之后...
    		#     return HttpResponse('收到了你的数据 马上处理')
    		"""为了减少代码的层级:一般情况下视图函数处理get请求较多 所以可以直接再函数体内先写get请求对应的逻辑
    		将其他请求利用request.method做出区分
    		"""
    		if request.method == 'POST':
    			return HttpResponse('收到了')
    		return render(request,'login.html')
    
    

    django链接MySQL

    需要你自己提前创建好对应的库 才能链接数据库
    
    

    1.先去配置文件中配置相关参数

    DATABASES = {
    				'default': {
    					'ENGINE': 'django.db.backends.mysql',  # 数据库类别
    					'NAME': 'day49',  # 库的名字
    					'HOST':'127.0.0.1',
    					'PORT':3306,
    					'USER':'root',
    					'password':'123',
    					'CHARSET':'utf8'
    				}
    			}
    
    

    2.在项目名或者应用名下面的__init__文件中告诉django使用pymysql链接数据库而不是用默认的mysqldb

    import pymysql
    pymysql.install_as_MySQLdb()
    
    

    django ORM简称

    django ORM不会帮你创建数据库,需要我们自己手动创建表
    
    

    orm 的对象关系映射

    类                                表
    
    对象                            记录
    
    属性                            字段值
    
    
    

    作用:

    能够让一个不会数据库的小白也能够通过 python面向对象语法,以点的方式来简单快捷的操作数据库。
    
    

    1578112152090

    怎么用django 操作MySQL

    首先需要到指定应用下的models.py中书写我们的模型类(对象)
    
    
    models.py
    		class User(models.Model):
    			# id int primary key auto_increment
    			id = models.AutoField(primary_key=True)
    			# name varchar(32)
    			name = models.CharField(max_length=32)
    			# password int
    			password = models.IntegerField()
    
    

    1578137078058

    1578137087431

    如果我们在创建表时,为了防止重名,所以系统会自动生成一个后缀名 如图。

    1578137221499

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

    回顾:(同步异步)

    同步(串行)

    如果两个啊a,b程序都要提交并执行,假如a先提交执行任务,b必须等待a执行结束后,才能提交任务。
    
    

    异步:(并发)

    如果两个a,b程序都要提交并执行时,假如a先提交并执行时,b无需要等待a执行结束,就可以直接提交任务。
    
    

    数据库迁移值代码:

    1.python3 manage.py makemigrations #就是就你对数据库的改动记录放到一个文件夹里,通俗一点就是放在一个记事本上(migrations迁移 到文件夹)
    2.python3 manage.py migrate  # 将改动真正的同步到数据库中
    
    

    注意

    上面两个命令永远是成对出现的 只要你执行了1 就必须要执行2
    
    
    *********只要你动了models.py跟数据库相关的代码 你就必须要重新执行上面的两条命令来保证数据库与models.py一致***********
    
    

    字段的增删改查

    字段的增

    1.要么给字段设默认值
    2.要么运行字段为空
    
    

    1578135853241

    字段的查

    自己查看表
    
    

    字段的改

    修改models代码 之后执行数据迁移命令即可
    1.python3 manage.py makemigrations  # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
    2.python3 manage.py migrate # 将改动真正的同步到数据库中
    
    

    字段的删

    只要注释掉对应的字段 执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)
    
    

    1578136337531

    对数据的增删改查

    对数据的查

    1.filter()
    1.filter()
    	from app01 import models
    	res = models.User.objects.filter(username='jason')  #相当于select * from user where username='jason'# 返回的结果是一个列表  支持索引取值但是不支持负数并且不推荐使用 推荐你使用它给你封装好的方法
    	user_obj = res.first()# filter方法条件不存在的时候 不会报错返回的是一个空列表
    	"""
    	filter括号内直接放多个关键字参数 并且多个关键字参数之间是and关系
    	res = models.User.objects.filter(username='jason',password='123')  # select * from user where username='jason' and password='123';
    	"""
    
    
    查所有的数据
    1.filter() 括号内不写拿所有
    	<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>
    2.all()    查询所有数据
    	<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>
    
    

    对数据的增

    1.create()
    	user_obj =models.User.objects.create(name=username,password=password)
    	print(user_obj,user_obj.name)
    	# 该方法有返回值 返回值就是当前被创建的对象本身
    2.对象的绑定方法
    	# 方式2
    	# 1 先生成一个User对象
    	user_obj = models.User(name=username,password=password)
    	# 2 调用对象的绑定方法
    	user_obj.save()
    
    

    对数据的删

    用户点击谁 你的后端就应该删除
    后端如何获取用户想要删除的数据id?
    models.User.objects.filter(id=delete_id).delete()  # 将filter过滤出来的数据全部删除   批量删除
    
    

    对数据的改 两种方式

    如何获取用户想要修改的数据id
    			根据数据id获取数据并且展示到前端页面供用户查看
    
    
    	
    # 方式1(推荐)               批量更新
    			models.User.objects.filter(id=edit_id).update(name=username,password=password)
    # 方式2(了解)
    # 1 先获取数据对象
    edit_obj = models.User.objects.filter(id=edit_id).first()
    # 2 再修改对象属性
    edit_obj.name = username
    edit_obj.password = password
    # 3 调用对象的绑定方法保存
    edit_obj.save()
    
    
  • 相关阅读:
    php apc
    nginx https
    js弹出确认框,挺全
    websocket nodejs
    nodejs express测试
    【C++】Mandelbrot集绘制(生成ppm文件)
    【Scheme】Huffman树
    【Scheme】符号求导
    【Scheme】树结构
    【Scheme】序列的操作
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/12150211.html
Copyright © 2020-2023  润新知