Django基础
1.Django小白必会三板斧
1.1 HttpResponse 返回纯文本或者JSON数据
from django.shortcuts import render, HttpResponse
def index(request):
print(request)
# HttpResponse :返回纯文本或者JSON数据
return HttpResponse("ok")
1.2 render 渲染前端页面
from django.shortcuts import render, HttpResponse
# django 三板斧
def index(request):
print(request)
# render渲染前端页面的
# request 当前request对象
# template_name:当前app下面有一个templates文件夹
return render(request, "index.html")
1.3 redirect 重定向
def index(request):
print(request)
# redirect 重定向
return redirect("/home/")
def home(request):
return render(request, "index.html")
2.静态文件
2.1 模版文件
- html文件
2.2 资源文件
- 存储在本地的js文件,css文件,图片,视频,音频等
- 一般情况下我们会对静态文件进行划分
# jQuery...js文件 ---> js文件夹
# bootstrap ---> plugins 插件
# css文件 ---> css文件夹
# 头像 ---> avatar 文件夹
# static
2.3 在Django中配置静态文件
- 在settings.py文件中
# 默认的静态文件配置
STATIC_URL = '/static/'
- 在app 下创建一个static文件夹
- 创建一个子分类文件夹
- 访问静态文件
http://127.0.0.1:8000/static/avatar/1.jpg
- 在页面上可以渲染出当前静态文件
2.4 在项目目录下的静态文件访问不到
# 在Django的默认静态文渲染系统中
# 默认的文件访问位置为当前APP下的静态文件
# 如果想访问到项目目录下指定文件夹内容的静态文件,需要额外添加配置
# 静态文件配置
# 默认查找位置是当前APP的目录下
# 这个配置定义了静态文件应用在启用 FileSystemFinder 查找器时将穿越的额外位置
STATICFILES_DIRS = [
# img :当前项目下的静态文件夹的名字,并且也是路由中的地址前缀
os.path.join(BASE_DIR, 'img')
]
2.5 在前端中使用静态文件
# 第一步
# 在前端页面中的第一行
# {% load static %}
# 第二步:使用静态文件
# {% static 'avatar/1.jpg' %}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>当前是index页面</h1>
<img src="{% static 'avatar/1.jpg' %}" alt="">
</body>
</html>
3. request对象
3.1 request.method 获取请求方式
def register(request):
# request.methid
print(request.method)
3.2 request.GET 获取到get请求携带的请求参数
http://localhost:8000/register/?username=111&password=111&hobby=music&hobby=sport&hobby=game
- request.GET.get(key)
# 获取获取键值对数据(单个的键值对数据),多个数据的话,只能获取到最后一个
data = request.GET
print(data) # <QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['music', 'sport']}>
username = data.get('username')
print(username)
- request.GET.getlist(ke
# 获取GET请求携带的列表数据(一个键多个值的数据)
data = request.GET
print(data) # <QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['music', 'sport']}>
hobbylist = data.getlist("hobby")
print(hobbylist)
3.3 request.POST 获取POST请求携带的请求体
POST
<QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['sport', 'game']}>
data = request.POST
print(data)
username = data.get('username')
hobbylist = data.getlist("hobby")
4. Django连接数据库
4.1 Django自带一个数据
- 自带一个数据库sqlite3
# 在settings.py文件中
# 数据库的配置项
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
4.2 Django连接MySQL数据库
4.2.1 配置mysql参数
# MySQL配置项
DATABASES = {
'default': {
# ENGINE :默认的引擎 mysql
'ENGINE': 'django.db.backends.mysql',
# HOST : 主机地址127.0.0.1 / localhost
"HOST": "127.0.0.1",
# PORT : mysql 的服务端口
"PORT": 3306,
# USER : 用户名
"USER": "root",
# PASSWORD : 数据库密码
"PASSWORD": "123456",
# NAME : 数据库名字
"NAME":"django_02",
# CHARSET : 默认编码集
"CHARSET": "utf8mb4"
}
}
4.2.2 启动Django报错
Did you install mysqlclient?
4.3 启动mysql报错
4.3.1 解决办法一
- 猴子补丁
- 可以放在任意位置的
__init__.py
文件中
import pymysql
pymysql.install_as_MySQLdb()
4.3.2 下载第三方模块
- 3.x版本以后建议你使用 mysqlclient
pip install mysqlclient
- 运气
- win 电脑给力一点,安装就不会报错
- mac系统安装 mysqlclient 费劲
4.3.3 win报错解决办法
- 访问 whl文件的官网
- https://pypi.org/project/mysqlclient/#files
pip install mysqlclient-2.2.4-cp310-cp310-win_amd64.whl
5.Django中的orm框架
5.1 什么是ORM
- ORM是一种将对象与关系型数据库之间的映射的技术,主要实现了以下三个方面的功能:
- 数据库中的表映射为Python中的类
- 数据库中的字段映射为Python中的属性
- 数据库中的记录映射为Python中的实例
- ORM的主要优点是可以减少开发人员编写重复的SQL语句的时间和工作量,并且可以减少由于SQL语句的调整和更改所带来的错误。
5.2 DjangoORM框架的优点
- 与其他ORM框架相比,Django ORM拥有以下优点:
- 简单易用:Django ORM的API非常简单,易于掌握和使用。
- 丰富的API:Django ORM提供了丰富的API来完成常见的数据库操作,如增删改查等,同时也支持高级查询和聚合查询等操作。
- 具有良好的扩展性:Django ORM可以与其他第三方库进行无缝集成,如Django REST framework、Django-Oscar等。
- 自动映射:Django ORM支持自动映射,开发者只需要定义数据库表的结构,就可以自动生成相应的Python类,从而减少开发过程中的重复代码量。
5.3 ORM之建表操作
5.3.1 创建模型表
class User(models.Model):
# 数据库中的字段映射未puthon的属性
# 定义一个用户名,字符串类型,长度
# mysql 字符串类型,varchar char
# CharField字符串类型,max_length最大长度,verbose_name注释
username = models.CharField(max_length=32, verbose_name="用户名")
password = models.CharField(max_length=32, verbose_name="密码")
# IntegerField相当于mysql的int字段
age = models.IntegerField(verbose_name="年龄")
# FloatField相当于mysql的float字段
salary = models.FloatField(verbose_name="薪资")
5.3.2 迁移文件
- 生成迁移文件
# 命令行
python manage.py makemigrations
chenxu@chenxudeMacBook-Pro new_djangoProject % python3.10 manage.py makemigrations
Migrations for 'app01':
app01/migrations/0001_initial.py
- Create model User
- 迁移文件生效
# 迁移记录生效
python manage.py migrate
标签:文件,静态,request,Django,小白,ORM,必会,django,data
From: https://www.cnblogs.com/Formerly/p/18102501