Django学习笔记

参考书籍:《Django 3 By Example Build powerful and reliable Python web applications from scratch》
Django 基础教程 by Leif Azzopardi David Maxwell (z-lib.org)(中译版)

为什么要学Django?

Django是一个强大的Python Web开发的后端框架,优势在于简单,简洁,适合任何人上手,随着你深入学习Django,你会对此深有体会


下面,我们开始学习,记得坚持

第一个Django项目:startproject

使用Django我们需要先下载并配置python

参考:
https://zhuanlan.zhihu.com/p/344887837
https://blog.csdn.net/qq_44214671/article/details/113469811

下载好后,建好项目的文件夹,在该文件夹终端输入:
(注意Python版本和Django版本要兼容)

1
pip install django

并通过

1
2
3
4
5
6
(base) (Django_environment) PS D:\DjangoProject\Django_environment\Scripts> python
Python 3.11.8 | packaged by Anaconda, Inc. | (main, Feb 26 2024, 21:34:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'4.2.7'

来检查django是否安装好,可以看到我的环境是我的环境是python3.11+django4.2.7
选择安装内容:虚拟环境
虚拟环境可以帮助我们进行版本管理与维护,不需要的可以跳过这段
通过

1
python3.11 venv -m Django_environment(虚拟环境文件夹名称,其他也可以)

创建虚拟环境后,我们可以通过激活该环境来使用其中的 Python 版本和包。在不同的操作系统上,激活虚拟环境的命令也略有不同。在 Windows 上,可以运行以下命令:

1
Django_environment(刚才创建的文件夹)\Scripts\activate

这里也可以使用virtualenv,具体参考https://www.simononsoftware.com/virtualenv-tutorial/

这样我们就进入了虚拟环境

创建项目

在项目所在文件夹,输入

1
django-admin startproject tango_with_django_project

建立了第一个文件,django-admin startproject是创建Django项目的命令,后面的是项目名称
创建完后,项目目录中有个名为 manage.py 的文件,在开发过程中时常用到。它提供了一系列维护 Django 项目的命令,例如通过它可以运行内置的 Django 开发服务器,可以测试应用,还可以运行多个数据库命令。几乎每个 Django 命令都要调用这个脚本。
在另一个文件夹(即项目代码文件夹)下,有这么几个文件:

  • init.py:一个空 Python 脚本,存在的目的是告诉 Python 解释器,这个目录是一个Python包
  • settings.py:存放 Django 项目的所有配置
  • urls.py:存放项目的 URL 模式
  • wsgi.py:用于运行开发服务器和把项目部署到生产环境的一个 Python 脚本。
    执行指令,来看一下本地的Django轻量级服务器是什么样的
    1
    python manage.py runserver

    这里你可能会遇到报错,但没关系,跟着提示的指令,运行它提供的命令,从而应用迁移(跟数据库有关,这里我们暂且不关注)

python manage.py migration
点开返回的地址+端口
看到小火箭了吗?
你也可以通过一些指令使同一局域网或者远程的同伴一起来观看

startapp

运行命令

1
python manage.py startapp rango

startapp 目录在项目的根目录(也就是manage.py所在的目录)中创建一个新目录,这个app名为 rango,其中包含一些 Python 脚本

  • init.py:与前面那个的作用完全一样
  • admin.py:注册模型,让 Django 为你创建管理界面
  • apps.py:当前应用的配置
  • models.py:存放应用的数据模型,即数据的实体及其之间的关系
  • tests.py:存放测试应用代码的函数
  • views.py:存放处理请求并返回响应的函数
  • migrations 目录:存放与模型有关的数据库信息
    views.py 和 models.py 是任何应用中都有的两个文件,是 Django 所采用的设计模式”模型-视图-模板“的主要部分。

为了让Django项目知道这个app的存在,这里在startproject命令创造的那个子文件夹的setting.py中修改

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rango',#添加内容,告诉框架我们新添加了这个应用
]

当然,Django是个非常人性化的框架,有时候也会自动追加到INSTALLED_APPS中,这时候就不必手动了

编写视图

视图有模型和模板,这里我们先尝试用视图返回一些简单文本

1
2
3
4
5
6
#edit in rango/views.py
def index(request):
return HttpResponse("Rango says hey there partner! <br/> <a href='/rango/about'>About</a>")

def about(request):
return HttpResponse("Rango says here is the about page. <br/> <a href='/rango/'>Index</a>")

这里index,about两个函数分别返回两个HttpResponse对象,里面包含一个指向某一页面的链接
那么,如何实现文本返回呢?或者说如何触发他们?(类似于Qt的信号槽和JS的Listener)

1
2
3
4
5
6
7
8
9
10
#edit in project/urls.py
from django.urls import include, path
from django.contrib import admin
from rango import views
urlpatterns = [
#将以rango/ 为开头的url交给rango应用处理
path('rango/', include('rango.urls')),
path("admin/", admin.site.urls),
]

在rango

1
2
3
4
5
6
7
8
9
#edit in rango/urls.py
from django.urls import path
from rango import views

urlpatterns = [
#只要匹配到"rango/ "空字符串,就会调用views.index()视图函数
path('', views.index, name='index'),
path('about/', views.about, name='about'),
]

这两段代码实现了这一功能,包括:

  • 利用url统一资源定位符进行视图管理,在第一段代码中,我们用urlpatterns中的path约束了admin开头的,跳转到admin.site.urls;而rango开头的统一由rango.urls管理(即是include(‘rango.urls’)**)
  • 触发views.py视图中的函数,第二段代码中以rango/为结尾的调用views.index函数,以rango/about结尾的调用views.about函数