django框架(部分讲解)

静态文件配置

1.编写一个用户登录页面
2.静态文件
	不怎么经常变化的文件 主要针对html文件所使用的到的各种资源
		css文件、js文件、img文件、第三方框架文件
    
	django针对静态文件资源需要单独开始一个目录统一存放
    	static目录
  			该目录下如果各种类型的文件都多 还可以继续创建目录
         		css目录
            	js目录
               img目录
            	utils目录/plugins目录/libs目录/others目录/不创
3.资源访问
	我们在地址栏中之所以可以属于路由获取到相应的资源是因为程序员提前开设了资源的接口
4.静态文件资源访问
	默认情况下无法访问 因为我们没有提前开设静态文件资源的访问接口

静态文件相关配置

想让前端能访问后端的文件需要设置配置信息开放权限

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

注意:名称需要纯大写,否则不会执行

1.接口前缀

STATIC_URL = '/xxx/'  
# 访问静态文件资源的接口前缀(相当于通行证)
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),  # 存储静态文件资源的目录名称
    os.path.join(BASE_DIR, 'static1'),  # 存储静态文件资源的目录名称,可以同时创建多个目录
    os.path.join(BASE_DIR, 'static2'),  # 存储静态文件资源的目录名称
]

接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返

image

2.接口前缀动态匹配

当我们在配置文件中开放了接口后,如果我们想要修改接口名称就需要在html文件中同时进行修改,当网页很多的时候工作量就会很大,这时候就需要设置接口前缀的动态匹配

<head>
    <meta charset="UTF-8">
    <title>blogs</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <link rel="stylesheet" href="{% static 'blog.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
</head>

form表单

action属性

  • 我们给表单标签form添加属性action控制数据提交的地址
<form action="/login/" method="post">
  • action属性的三种配置
	1.action=""  数据默认提交给当前页面所在的地址
	2.action="https://www.baidu.com/"  完整地址
 	3.action="/index/"  朝当前服务端的index地址提交
  • method属性
<form action="/login/" method="post">

http协议中浏览器和服务端通过报文交互,报文分成请求报文和响应报文,转换到method属性中就是getpost两种值。

  • 作用:控制数据提交的方法
默认情况是get
	可以改post

请求方法补充

get

  • 朝服务端索要数据 也可以携带一些额外的要求

​ 携带额外数据的方式: URL?xxx=yyy&uuu=zzz

​ 也就是说网址后面用?隔开数据,数据之间用&符号分隔

​ 问号后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据

  • 当我们打开浏览器访问网页的时候就是get方式

image

post

  • 朝服务端提交数据

​ 携带额外数据的方式: 请求体

​ 请求体携带数据安全性较高并且没有大小限制

  • 当我们使用按钮提交新数据的时候使用的就是post方式

image

前期发送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',
]

image

request对象

  • 这里介绍了request对象的一些方法
request.method	获取请求方式 结果是纯大写的字符串数据
	结果:GET\POST
    
request.POST	获取post请求请求体里面携带的数据
	request.POST.get()		获取列表最后一个数据值
 	request.POST.getlist()	 获取整个列表数据,获取了列表后可以使用索引获取列表中的值
    
request.GET		获取网址问号后面携带的数据
	request.GET.get()		获取列表最后一个数据值
 	request.GET.getlist()	 获取整个列表数据,跟POST一样,获取了列表后可以使用索引获取列表中的值
 
"""
在视图函数中针对不同的请求代码编写套路
	if request.method == 'POST':
		return HttpResponse()
	return HttpResponse()
"""

django连接数据库

django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它

默认配置sqlite3

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

我们在学习过程中使用mysqlclient模块替换默认的数据库

  1. 需要指定模块
	django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
    	import pymysql
    	pymysql.install_as_MySQLdb()
	django2.X及以上都可以直接通过下载mysqlclient模块解决
    	pip3.8 install mysqlclient
        或是pycharm中下载

image

注意:该模块windows下载问题不大 主要是mac电脑可能有问题

  1. 修改配置文件
DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day51',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '123',
            'CHARSET': 'utf8'
        }
}

app文件目录中的双下init文件也需要添加配置

import pymysql
pymysql.install_as_MySQLdb()

image

pycharm连接MySQL数据库

方式一:

pycharm右上角点击图标后创建连接

image

之后弹出一个弹窗,输入数据库的信息

image

第一次连接的时候会要求下载插件,这里点击下载就好了,很快的

image

接着点击下方的Test Connection测试连接,成功了就可以点击ok保存退出了

image

方式二:

使用左下角的图标连接数据库

image

后续操作参考方法一

ORM简介

ORM概念

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。因此实现了让不会SQL语句的python程序员,使用python面向对象的语法来操作数据库的目的

ORM在业务逻辑层和数据库层之间充当了桥梁的作用

类				    表
对象				   一条条数据
对象点名字			 数据获取字段对应的值

注意:ORM由于高度封装了SQL,所以有时候效率较低,我们需要自己写SQL

ORM由来

  • 让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)

  • 几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中

  • 按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的

ORM的优势和劣势

ORM的优势

  • ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段

  • ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

  • 让软件开发人员专注于业务逻辑的处理,提高了开发效率

ORM的劣势

  • ORM的缺点是会在一定程度上牺牲程序的执行效率。

  • ORM用多了SQL语句就不会写了,关系数据库相关技能退化…

八、ORM基本操作

​ 因为ORM相当于是对数据库进行映射操作,所以我们需要跟数据库中的表建立关系

1.现在app中的models.py中编写模型类

		class GirlsInfo(models.Model):
        # 字段名 = 字段类型 + 约束条件
        id = models.AutoField(primary_key=True)  
        name = models.CharField(max_length=32)
        age = models.IntegerField()

2.执行数据库迁移相关命令

python38 manage.py makemigrations  将操作记录到小本本上(migrations)
    执行成功后migrations文件夹下会多出一个py文件
	python38 manage.py migrate		  将操作同步到数据库上
'''注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令'''

如果出现下方问题

image

解决方案是修改配置文件

image

成功的结果如下图

image

image

image

ORM基本语句

from app01 import models
models.类名.objects.create()		创建记录
models.UserInfor.objects.create(name='zzh',pwd='123')

models.类名.objects.filter()		查看记录
res = models.UserInfor.objects.filter(name=name)
print(res)
print(res[0])
print(res[0].id)
print(res[0].name)
print(res[0].pwd)

models.类名.objects.update()		修改记录
models.UserInfor.objects.filter(id=2).update(name='xiaozhu',pwd='666')

models.类名.objects.delete()		删除记录
models.UserInfor.objects.filter(id=2).delete()

request对象

request.method	获取请求方式 结果是纯大写的字符串数据
	GET\POST
request.POST	获取post请求请求体里面携带的数据
	request.POST.get()		获取列表最后一个数据值
 	request.POST.getlist()	 获取整个列表数据
request.GET		获取网址问号后面携带的数据
	request.GET.get()		获取列表最后一个数据值
 	request.GET.getlist()	 获取整个列表数据
 
"""
在视图函数中针对不同的请求代码编写套路
	if request.method == 'POST':
		return HttpResponse()
	return HttpResponse()
"""

pycharm连接数据库

django连接数据库

django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它

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


1.修改配置文件
DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day51',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '123',
            'CHARSET': 'utf8'
        }
}
2.需要指定模块
	django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
    	import pymysql
    	pymysql.install_as_MySQLdb()
	django2.X及以上都可以直接通过下载mysqlclient模块解决
    	pip3.8 install mysqlclient
	ps:该模块windows下载问题不大 主要是mac电脑可能有问题

ORM简介

ORM:对象关系映射
	能够让不会SQL语句的python程序员 使用python面向对象的语法来操作数据库
	
类					表
对象					一条条数据
对象点名字			 数据获取字段对应的值

ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己写SQL

ORM基本操作

1.现在models.py中编写模型类
	class GirlsInfo(models.Model):
        # 字段名 = 字段类型 + 约束条件
        id = models.AutoField(primary_key=True)  
        name = models.CharField(max_length=32)
        age = models.IntegerField()
2.执行数据库迁移相关命令
	python38 manage.py makemigrations  将操作记录到小本本上(migrations)
	python38 manage.py migrate		  将操作同步到数据库上
 '''注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令'''

ORM基本语句

from app01 import models
models.类名.objects.create()
models.类名.objects.filter()
models.类名.objects.update()
models.类名.objects.delete()
posted @ 2022-12-11 02:57  吴仁耀  阅读(80)  评论(0)    收藏  举报