django小白必会

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报错解决办法
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
posted @ 2024-03-28 19:52  Formerly0^0  阅读(1)  评论(0编辑  收藏  举报