【一】Django框架版本介绍

【一】Django框架版本介绍

复制代码
【一】Django框架版本
● Django 是一个高级的Python Web框架,由荷兰人Armin Ronacher创建。
● 随着版本的迭代和功能的不断优化,Django在处理异步请求方面也有了显著的进步。
【1】Django1.x
● 默认不支持异步
● Django 1.x主要集中在传统的Web开发上,其设计思想倾向于同步HTTP请求处理。
● 默认情况下,并未内置对异步编程的支持,开发者若要在Django 1.x中实现异步处理,通常需要借助第三方库如django-celery或django-tornado等来结合其他异步框架(如Celery、Tornado等)来实现后台任务的异步执行。
【2】Django2.x
● 默认不支持异步
● 在Django 2.x版本中,虽然核心框架并未直接提供对异步HTTP请求的支持,但已经开始引入一些异步相关的新特性和API,比如asgi (Asynchronous Server Gateway Interface) 标准的初步支持。
● 开发者可以通过安装第三方ASGI服务器(如daphne或uvicorn),配合channels库使用,来实现Websockets和消息队列等场景下的部分异步功能。
【3】Django3.x
● 自带异步功能
● Django 3.x标志着其正式对异步编程的支持,它引入了channels框架作为标准库的一部分,实现了全栈的WebSocket支持以及与asyncio的集成,使得开发者可以直接在视图层、消费者层以及中间件层面编写异步代码,提供了ASGI和HTTP/2协议的底层支持。
● 此外,django-redis、django-socketio等第三方库也进一步丰富了异步应用的构建能力。
【4】Django4.x
● 在Django 4.x版本之后,异步功能得到了持续加强和完善。
● 例如,在4.0中,channels框架进行了重大重构,使其更加轻量级和模块化,同时引入了websockets库作为默认WebSocket支持,大大简化了开发者配置和使用的复杂度。
● 此外,对于长期支持计划(LTS)版本,Django会确保异步相关的API和工具在后续更新中得到稳定且兼容的维护和支持,以满足现代Web应用对高性能、低延迟的需求。

# 我们学习 3.2.12 版本 --- 

# 带你们用 4.x 版本 --- 操作和 3.2.12 版本 是一致 如果有老项目 3.2.12 

【二】Django框架安装

【1】前提

  • 你要知道你自己的系统解释器版本和系统解释器版本的位置

【2】安装

复制代码
pip install django # 默认按照最新版本安装

# 我们要学习 3.2.12 
pip install django==3.2.12

pip install django==
# 会打印当前Django的所有版本 一直到 最新版

【3】注意事项

复制代码
● 计算机名称不要出现中文
● python解释器版本不同可能会出现启动报错
● 项目中所有的文件名称不要出现中文
● 多个项目文件尽量不要嵌套,做到一项一夹
  • 启动如果报错,根据提示找到修改widgets.py文件第152行源码,删除最后的逗号即可

【三】Django框架基础使用

【1】检查当前Django版本

shell 复制代码
# 3.2.12 会知道版本
dream@DreamdeMacBook-Pro day54_Django % pip install django==3.2.12
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: django==3.2.12 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (3.2.12)
Requirement already satisfied: asgiref<4,>=3.3.2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from django==3.2.12) (3.7.2)
Requirement already satisfied: pytz in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from django==3.2.12) (2023.3.post1)
Requirement already satisfied: sqlparse>=0.2.2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from django==3.2.12) (0.4.4)
Requirement already satisfied: typing-extensions>=4 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from asgiref<4,>=3.3.2->django==3.2.12) (4.9.0)

【2】安装之后会出现一个文件夹

【3】查看Django命令

shell 复制代码
django-admin
shell 复制代码
django-admin

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).

【四】创建项目

shell 复制代码
django-admin startproject 项目名

django-admin startproject demo01
  • 执行上述命令就会在当前路径下出现一个文件夹叫 demo01

【2】PyCharm创建项目

【五】启动项目

【1】Django命令行启动

shell 复制代码
cd demo01
复制代码
demo01          manage.py
  • 启动项目
shell 复制代码
python310 manage.py runserver [IP:PORT]

# 不写 [IP:PORT] 默认就是 127.0.0.1:8000
复制代码
dream@DreamdeMacBook-Pro demo01 % python310 manage.py runserver 
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
September 27, 2024 - 03:44:26
Django version 3.2.12, using settings 'demo01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C. # 如果 你想结束项目退出 CONTROL-C

【2】PyCharm启动

  • 打开项目 是两层

    demo01 # 外边一层项目名
    ├── db.sqlite3
    ├── demo01 # 里边一层和项目名同名的文件夹
    │ ├── init.py
    │ ├── pycache
    │ │ ├── init.cpython-310.pyc
    │ │ ├── settings.cpython-310.pyc
    │ │ ├── urls.cpython-310.pyc
    │ │ └── wsgi.cpython-310.pyc
    │ ├── asgi.py
    │ ├── settings.py
    │ ├── urls.py
    │ └── wsgi.py
    └── manage.py

  • 修改端口
  • 再启动项目的时候可能会遇到一个问题
  • 配置文件不想改 想使用默认的 添加新配置启动

【六】创建APP

【1】APP概念介绍

复制代码
● 在Django框架中,应用程序(Application)是组织和管理项目代码的基本单元。
● 它不仅包含了与特定业务逻辑相关的模型、视图、模板以及URL配置,还可能包括 forms、signals、中间件、管理后台等组件,实现了项目的模块化设计。
【1】介绍
● Django框架就像是一个高度模块化的操作系统,为开发者提供了基础设施和服务,如数据库连接、认证授权、请求处理等。
【2】比喻
(1)大学与学院
● Django框架相当于是一所大学,应用相当于是大学里面的各个学院 
  ○ 大学相当于是个空壳子 
    ■ 负责提供环境
  ○ 学院才是一个个真正具备特定功能的集合
(2)操作系统与服务
● 每个应用就像是操作系统中的一个进程或服务,负责处理特定领域的任务和数据操作。
● 用户应用(user)关注用户的注册、登录、权限管理等功能;
● 订单应用(order)主要处理商品购买、订单状态跟踪、支付确认等相关事务;
● 商品应用(goods)专注于商品信息管理、分类展示、搜索推荐等功能;
● 后台管理应用(backend)则通常包含对系统设置、数据统计、权限控制等方面的集中管理和维护。
【2】示例
● 使用django写一个淘宝,淘宝里面有很多功能模块
● 我们应该先创建一个空的django项目然后根据功能的不同创建不同的应用
● django项目
应用名	业务
user	用户相关业务:管理用户账户信息(账号、密码、角色、权限)、用户行为记录、消息通知等
order	订单相关业务:负责订单生成、订单详情展示、订单状态变更、支付接口调用、物流追踪及订单评价等
goods	产品相关业务:包括商品分类管理、商品详情展示、库存管理、商品评论、浏览记录等
promotion	促销相关业务:针对促销活动的规划、优惠券发放、满减规则设置、折扣计算等;
category	商品类别业务:用于商品类别树的构建、导航菜单设置、新品上架、热门推荐等;
logistics	物流相关业务:对接物流公司API以获取物流信息、快递单号追踪等功能;
statistics	数据分析相关业务:收集并分析平台各项运营数据,如访问量、转化率、客单价等,为决策提供支持;

【2】创建APP

  • 前提是当前文件夹路径下有 manage.py
shell 复制代码
python manage.py startapp APP名字
shell 复制代码
python manage.py startapp user
  • 效果就是在当前项目路径下出现了一个 user文件夹

【3】注册APP

  • settings.py 中有一个代码快
python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 直接放自己创建的app名字即可
    "user"
]

【4】PyCharm创建APP

复制代码
startapp app名字
python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 方式一 直接写 app 名字
    "user",
    # 方式二 : 写具体的路径
    "shop.apps.ShopConfig"
]

【七】Django项目文件介绍

复制代码
DjangoProject54 # 主项目名 必须
├── DjangoProject54 # 存放Django项目的基本配置的文件夹 和你的项目名是同名的 必须
│   ├── __init__.py # 初始化项目需要加载的代码 后面会写
│   ├── __pycache__ # Python解释器给Django项目的缓存文件  --- 在项目中看不到 不用管
│   │   ├── __init__.cpython-310.pyc # Python解释器缓存文件
│   │   └── settings.cpython-310.pyc # settings 更改后的缓存
│   ├── asgi.py # 上线到服务器之后都需要配置的启动文件 本地的项目不写 不动
│   ├── settings.py # Django的项目配置文件
│   ├── urls.py # 跟路由映射文件
│   └── wsgi.py # 基于 wsgiref 模块分装后的 wsgi 模块 去帮助你 创建 app 不动
├── manage.py # 加载Django项目的所有配置 并帮助我们启动Django项目
├── templates
└── user # 自己创建的 APP 的名字
    ├── __init__.py # 没有东西 后面会写 
    ├── admin.py # 我们在进入后台管系统之后注册内容 现在不写 后面 写
    ├── apps.py # 当前APP 的默认配置 不要瞎改  不要动
    ├── migrations # 数据库迁移记录文件夹 MySQL 将 Python代码定义的数据库结构转换成SQL 语句
    │   └── __init__.py # 没东西但是不允许删除 必须有
    ├── models.py # 存储我们自己定义的数据库模型 自己通过 Python代码定义的数据库字段
    ├── tests.py # Django的测试文件 不用管
    └── views.py # 自己写的业务逻辑在的地方

【八】小白必会三板斧

复制代码
from django.shortcuts import render,HttpResponse,redirect
python 复制代码
from django.shortcuts import render, HttpResponse, redirect


# Create your views here.
# 定义视图函数并且有一个 request 参数必写
def index(request):
    # 返回纯文本内容
    return HttpResponse("OK")


def login(request):
    # 返回 页面 对象
    return render(request, "login.html")


def register(request):
    print("欢迎来到注册函数")
    # 重定向路由
    # http://127.0.0.1:8000/register/
    # 自动帮你转接到 http://127.0.0.1:8000/login/
    return redirect("/login/")
    '''
    [27/Sep/2024 04:22:31] "GET /register/ HTTP/1.1" 302 0
    [27/Sep/2024 04:22:31] "GET /login/ HTTP/1.1" 200 145
    '''
相关推荐
gf13211113 小时前
拉长视频时长的两种方法
数据库·音视频
小猿姐3 小时前
KubeBlocks for ClickHouse 容器化之路
数据库·云原生·容器
小猿姐3 小时前
KubeBlocks for MinIO 容器化之路
数据库·云原生·容器
羑悻的小杀马特3 小时前
从Cgroups精准调控到LXC容器全流程操作:用pidstat/stress测试Cgroups限流,手把手玩转Ubuntu LXC容器全流程
linux·服务器·数据库·docker·lxc·cgroups
蒋星熠4 小时前
Redis 7.0 高性能缓存架构设计与优化
数据库·redis·分布式·python·缓存·docker·微服务
矢志不移7924 小时前
SQLite 数据库
数据库·sqlite
RestCloud4 小时前
10迁移TiDB数据库数据到GaussDB
数据库·tidb·etl·gaussdb·数据处理·数据同步·集成平台
vvilkim5 小时前
构建坚不可摧的数据堡垒:深入解析 Oracle 高可用与容灾技术体系
数据库·oracle
_風箏6 小时前
SpringBoot【集成generator】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程
数据库·后端
_風箏6 小时前
SpringBoot【集成ClickHouse】clickhouse+mybatis-plus配置及使用问题说明(含建表语句、demo源码、测试说明)
数据库·后端