松滋市住房和城乡建设局网站,wordpress连接服务器,网站建设咋做,南通网站建设项目自从2005年诞生以来#xff0c;Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目#xff0c;还是大型的企业应用#xff0c;Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django#xff0c;从基础知识到高…自从2005年诞生以来Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目还是大型的企业应用Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django从基础知识到高级特性让你在项目开发中得心应手。
目录
Django简介与安装
1. Django是什么
Django适合的场景
2. Django的特点
3. 环境搭建
步骤一检查或安装Python
步骤二创建虚拟环境
步骤三安装Django
4. 创建第一个Django项目
创建一个新项目
启动开发服务器
Django项目结构解析
1. 项目与应用的区别
类比示例
2. Django项目目录结构
manage.py
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
3. Django应用的基本构造
admin.py
apps.py
models.py
tests.py
views.py
migrations/
4. 注册应用
5. Django中的重要文件总结
Django模型层Models
1. ORM概述
优点
2. 模型的定义
基本模型定义
字段类型
字段选项
3. 模型的关系
一对一关系
一对多关系
多对多关系
4. 迁移与数据库操作
创建迁移文件
应用迁移
5. 数据库操作
6. 模型管理器Manager
Django视图层Views
1. 视图的基本概念
视图的职责
2. 函数视图Function-Based Views, FBV
示例简单的函数视图
视图绑定URL
视图中的逻辑处理
3. 类视图Class-Based Views, CBV
基本类视图
通用类视图Generic Views
DetailView 显示单个对象的详细信息。
4. 视图中的请求与响应
HttpRequest对象
HttpResponse对象
5. 视图与模板结合
使用render渲染模板
在模板中使用上下文数据
6. 处理错误和异常
自定义404页面 是的404
7. 中间件与视图
Django模板层Templates
1. 模板语言语法
1.1 变量
2. 模板的使用
3. 模板继承与模块化
3.1 定义父模板
3.2 定义子模板
3.3 使用模板继承的页面渲染
4. 模板中的静态文件
配置静态文件
5. 模板的自定义标签和过滤器
Django URL解析
1. URL配置的基础
2. 动态URL
3. 命名空间与反向解析
4. 命名空间
5. 正则表达式URL
6. URL优化 Django简介与安装
1. Django是什么 Django是一款开源的Web框架基于Python语言开发旨在帮助开发者快速构建高质量的Web应用程序。它采用了MVTModel-View-Template设计模式与经典的MVC模式类似但更加灵活。Django的宗旨是“Dont Repeat Yourself”别重复造轮子通过封装常见的Web开发任务减少开发者的工作量。 Django适合的场景
内容管理系统CMS电商网站REST API后端数据驱动的动态网站
2. Django的特点
快速开发 提供大量开箱即用的功能模块如用户认证、管理后台、ORM等。安全性高 内置常见的安全机制防止SQL注入、跨站脚本XSS和跨站请求伪造CSRF。可扩展性强 丰富的插件生态系统支持自定义开发。强大的社区支持 丰富的文档和活跃的开发者社区。
3. 环境搭建
在开始学习Django之前需要准备开发环境包括Python解释器和Django框架本身。
步骤一检查或安装Python
# 检查是否已安装Pythonpython --version如果未安装前往Python官网下载最新版本并安装。
步骤二创建虚拟环境
为避免依赖冲突推荐在虚拟环境中安装Django
python -m venv myenv
source myenv/bin/activate # macOS/Linux
myenv\Scripts\activate # Windows步骤三安装Django
使用pip安装Django
pip install django#检查
django-admin --version4. 创建第一个Django项目
创建一个新项目
django-admin startproject myproject
cd myproject项目目录结构如下
myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.py启动开发服务器
python manage.py runserver#打开浏览器访问http://127.0.0.1:8000/可以看到默认的欢迎页面。
Django项目结构解析 在上一部分我们成功安装了Django并创建了第一个Django项目。接下来我们将深入了解Django项目的结构搞清楚每个文件和目录的作用从而为后续的开发工作奠定扎实的基础。 1. 项目与应用的区别
Django中的“项目”和“应用”是两个核心概念理解它们的区别对项目组织非常重要。
项目Project 一个Django项目是一个整体的Web服务或网站包含一系列设置和配置文件用于定义网站的全局行为。应用App 应用是项目中的一个子模块负责实现某一特定功能例如博客、论坛、用户管理等。一个项目可以包含多个应用。
类比示例
将项目比作一本书书中每一章就是一个应用。项目定义了书的标题、封面和大纲而应用则实现了具体的内容。
2. Django项目目录结构
创建项目时生成的默认目录结构如下
myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.pymanage.py
一个命令行工具用于与Django项目进行交互。例如启动服务器、执行数据库迁移等。
python manage.py runserver # 启动开发服务器
python manage.py makemigrations # 创建数据库迁移文件
python manage.py migrate # 应用数据库迁移
python manage.py createsuperuser # 创建管理员账号__init__.py
一个空文件表明该目录是一个Python包。
settings.py
全局配置文件包括数据库设置、已安装的应用、静态文件路径等。
INSTALLED_APPS [ # 已安装的应用django.contrib.admin,django.contrib.auth,...
]DATABASES { # 数据库配置default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,}
}urls.py
全局URL配置文件用于定义项目的路由规则。
from django.contrib import admin
from django.urls import pathurlpatterns [path(admin/, admin.site.urls),
]asgi.py
异步服务器网关接口配置用于支持异步请求处理。
wsgi.py
Web服务器网关接口配置用于生产环境部署。
3. Django应用的基本构造
在Django中应用是实现具体功能的基本单位。我们可以通过以下命令创建一个应用
python manage.py startapp myapp生成的应用目录结构如下
myapp/admin.pyapps.pymodels.pytests.pyviews.pymigrations/__init__.pyadmin.py
配置Django管理后台中的数据展示。
from django.contrib import admin
from .models import MyModeladmin.site.register(MyModel)
apps.py
配置应用的元信息。
models.py
定义数据库模型。
tests.py
用于编写单元测试。
views.py
定义视图逻辑用于处理用户请求并返回响应。
migrations/
用于存储数据库迁移文件。
4. 注册应用
在创建应用后需将其注册到项目中使Django识别该应用。步骤如下
打开settings.py文件。在INSTALLED_APPS中添加应用名称
INSTALLED_APPS [...myapp,
]5. Django中的重要文件总结
Django项目和应用中的核心文件共同构成了项目的开发框架
settings.py 全局配置中心。urls.py 路由管理。models.py 数据库模型设计。views.py 处理请求并返回响应。admin.py 管理后台配置。
Django模型层Models Django模型Models是框架的重要组成部分用于处理与数据库的交互。通过Django的ORMObject-Relational Mapping对象关系映射开发者可以直接使用Python代码操作数据库而无需编写繁琐的SQL语句。本部分将从模型的定义、关系设计到数据库操作带你全面了解Django的模型层。 1. ORM概述
Django的ORM是一种将Python对象与数据库表对应起来的技术。通过ORM开发者可以
定义数据库表结构。使用Python代码进行增删改查操作。轻松切换数据库如SQLite、PostgreSQL、MySQL。
优点
简化了数据库操作的复杂度。提高了代码的可读性和可维护性。提供了一致的API接口支持多种数据库。 2. 模型的定义
在Django中模型是Python类每个类对应一个数据库表类中的属性对应表中的字段。
基本模型定义
创建一个名为models.py的文件并定义模型
from django.db import modelsclass Author(models.Model):name models.CharField(max_length100) # 字符串字段email models.EmailField() # 邮箱字段bio models.TextField(blankTrue, nullTrue) # 可选字段def __str__(self):return self.name字段类型
Django提供了多种字段类型常用字段包括
CharField 用于存储短文本需指定max_length。TextField 用于存储长文本。IntegerField 存储整数。FloatField 存储浮点数。DateField/DateTimeField 存储日期或日期时间。BooleanField 存储布尔值。EmailField 用于存储并验证邮箱格式。FileField/ImageField 用于存储文件或图片。
字段选项
字段支持多个选项用于控制数据库行为
nullTrue 数据库中该字段可以为空。blankTrue 表单中该字段可以为空。defaultvalue 设置字段的默认值。choices 定义字段的枚举值。
class Book(models.Model):GENRE_CHOICES [(FIC, Fiction),(NF, Non-Fiction),(SF, Science Fiction),]title models.CharField(max_length200)genre models.CharField(max_length3, choicesGENRE_CHOICES)published_date models.DateField()3. 模型的关系
Django支持一对一、一对多和多对多关系。
一对一关系
使用OneToOneField定义一对一关系
class Profile(models.Model):user models.OneToOneField(auth.User, on_deletemodels.CASCADE)bio models.TextField()一对多关系
使用ForeignKey定义一对多关系
class Article(models.Model):title models.CharField(max_length100)author models.ForeignKey(Author, on_deletemodels.CASCADE)多对多关系
使用ManyToManyField定义多对多关系
class Student(models.Model):name models.CharField(max_length100)class Course(models.Model):name models.CharField(max_length100)students models.ManyToManyField(Student)4. 迁移与数据库操作
定义模型后需要将其同步到数据库中。Django提供了迁移工具来完成这一任务。
创建迁移文件
运行以下命令生成迁移文件
python manage.py makemigrations生成的迁移文件描述了数据库的变更。
应用迁移
运行以下命令将迁移应用到数据库
python manage.py migrate5. 数据库操作
Django提供了对模型的增删改查操作的API。
创建记录
author Author(nameJohn Doe, emailjohnexample.com)
author.save()查询所有记录
Author.objects.all()
条件查询
Author.objects.filter(nameJohn Doe)
获取单个对象
Author.objects.get(id1)更新记录
author Author.objects.get(id1)
author.email new_emailexample.com
author.save()删除记录
author Author.objects.get(id1)
author.delete()排序
Author.objects.order_by(name)分页
Author.objects.all()[:10]
6. 模型管理器Manager
Django的objects是模型的默认管理器可以通过自定义管理器扩展其功能
class AuthorManager(models.Manager):def active_authors(self):return self.filter(is_activeTrue)class Author(models.Model):name models.CharField(max_length100)is_active models.BooleanField(defaultTrue)objects AuthorManager()#调用自定义方法
active_authors Author.objects.active_authors()
Django视图层Views 在Django中视图Views是处理用户请求并返回响应的核心部分。通过视图我们可以定义应用的业务逻辑将模型数据传递给模板最终生成动态的网页内容。本部分将详细讲解视图的基本概念、类型及其在项目中的实际应用。 1. 视图的基本概念
Django视图是一个Python函数或类接收HTTP请求对象HttpRequest处理逻辑后返回HTTP响应对象HttpResponse。
视图的职责
处理用户请求。执行业务逻辑如查询数据库。渲染模板并返回响应。
2. 函数视图Function-Based Views, FBV
Django的函数视图是最基本的视图形式定义为普通的Python函数。
示例简单的函数视图
from django.http import HttpResponsedef hello_world(request):return HttpResponse(Hello, World!)视图绑定URL
在urls.py中绑定视图函数到特定的URL
from django.urls import path
from . import viewsurlpatterns [path(hello/, views.hello_world),
]访问http://127.0.0.1:8000/hello/时将返回Hello, World!。
视图中的逻辑处理
视图可以包含复杂的逻辑例如查询数据库并动态生成响应
from django.shortcuts import render
from .models import Articledef article_list(request):articles Article.objects.all()return render(request, articles.html, {articles: articles})render用于渲染模板。articles.html模板文件的名称。{articles: articles}上下文数据传递给模板。
3. 类视图Class-Based Views, CBV
Django提供了类视图便于处理复杂的逻辑。类视图将请求处理拆分为多个方法增强了代码的可复用性。
基本类视图
定义一个简单的类视图
from django.http import HttpResponse
from django.views import Viewclass HelloWorldView(View):def get(self, request):return HttpResponse(Hello, World from Class-Based View!)绑定URL
from django.urls import path
from .views import HelloWorldViewurlpatterns [path(hello/, HelloWorldView.as_view()),
]通用类视图Generic Views
Django内置了一些通用类视图用于处理常见任务如显示列表或详细信息。
ListView 显示对象列表。 DetailView 显示单个对象的详细信息。
from django.views.generic import ListView
from .models import Articleclass ArticleListView(ListView):model Articletemplate_name articles.htmlcontext_object_name articles绑定URL
urlpatterns [path(articles/, ArticleListView.as_view(), namearticle_list),
]4. 视图中的请求与响应
视图需要处理用户的请求并生成适当的响应。
HttpRequest对象
request对象包含了与用户请求相关的所有信息
request.method 请求方法GET、POST等。request.GET 获取查询参数。request.POST 获取表单提交数据。
示例
def search(request):query request.GET.get(q)return HttpResponse(fSearch query: {query})HttpResponse对象
HttpResponse用于返回自定义的响应
HttpResponse(content) 返回纯文本内容。HttpResponseRedirect(url) 重定向到指定URL。JsonResponse(data) 返回JSON数据。
5. 视图与模板结合
通常视图通过模板引擎生成动态网页。
使用render渲染模板
render函数简化了模板渲染的过程
from django.shortcuts import renderdef home(request):context {title: Welcome to Django}return render(request, home.html, context)在模板中使用上下文数据
模板文件home.html示例
!DOCTYPE html
html
headtitle{{ title }}/title
/head
bodyh1{{ title }}/h1
/body
/html6. 处理错误和异常
Django视图可以通过内置方法处理错误或异常提供更友好的用户体验。
自定义404页面 是的404
在views.py中定义404视图
from django.http import HttpResponseNotFounddef custom_404_view(request, exception):return HttpResponseNotFound(Page not found!)# 在settings.py中配置
handler404 myapp.views.custom_404_view7. 中间件与视图
中间件可以在请求到达视图之前或响应返回用户之前处理一些通用任务。例如认证、日志记录等。
示例记录请求路径的中间件
class LogMiddleware:def __init__(self, get_response):self.get_response get_responsedef __call__(self, request):print(fRequest path: {request.path})return self.get_response(request)在settings.py中注册
MIDDLEWARE [...,myapp.middleware.LogMiddleware,
]Django模板层Templates Django模板层Templates负责将动态数据渲染为HTML页面向用户呈现最终的内容。模板系统采用一种简洁的语法让开发者专注于页面结构而将复杂的逻辑留在视图层。本部分将详细介绍Django模板语言的语法、模板继承机制以及静态文件的管理。 1. 模板语言语法
Django模板语言Django Template LanguageDTL是一种简洁的标记语言用于动态渲染HTML内容。其语法由变量、标签和过滤器组成。
1.1 变量
模板中的变量使用双花括号包裹
p{{ variable_name }}/p标签是控制模板逻辑的核心使用{% ... %}表示。常见标签包括
**{% if %}条件语句。**{% for %}循环语句。**{% include %}包含其他模板。
示例
{% if user_name %}pHello, {{ user_name }}!/p
{% else %}pHello, Guest!/p
{% endif %}过滤器用于格式化变量语法为{{ variable|filter_name }}。 常见过滤器
date格式化日期。lower将字符串转为小写。length获取列表长度。
示例
p{{ current_date|date:Y-m-d }}/p
p{{ user_name|lower }}/p2. 模板的使用
模板文件通常存放在项目的templates目录下需在settings.py中配置模板路径
TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [BASE_DIR / templates], # 自定义模板目录APP_DIRS: True,...},
]创建模板文件 项目目录结构
myproject/templates/home.html渲染模板 在视图中调用render
def home(request):return render(request, home.html, {title: Welcome to Django})模板内容
!DOCTYPE html
html
headtitle{{ title }}/title
/head
bodyh1{{ title }}/h1
/body
/html3. 模板继承与模块化
模板继承机制允许定义通用的页面结构并通过子模板进行扩展从而减少重复代码。
3.1 定义父模板
父模板通常定义页面的通用结构
!-- templates/base.html --
!DOCTYPE html
html
headtitle{% block title %}My Site{% endblock %}/title
/head
bodyheaderh1My Website Header/h1/headermain{% block content %}{% endblock %}/mainfooterpMy Website Footer/p/footer
/body
/html3.2 定义子模板
子模板继承父模板并重写指定的块内容
!-- templates/home.html --
{% extends base.html %}{% block title %}Home Page{% endblock %}{% block content %}pWelcome to the home page!/p
{% endblock %}3.3 使用模板继承的页面渲染
视图调用子模板
def home(request):return render(request, home.html)4. 模板中的静态文件
静态文件CSS、JavaScript、图片等用于增强页面的视觉和交互效果。Django提供了一套机制来管理静态文件。
配置静态文件
在settings.py中配置静态文件路径
STATIC_URL /static/
STATICFILES_DIRS [BASE_DIR / static]# 确保在模板文件中加载静态文件标签
{% load static %}# 引用静态文件
link relstylesheet href{% static css/styles.css %}
img src{% static images/logo.png %} altLogo
5. 模板的自定义标签和过滤器
当Django内置的标签和过滤器无法满足需求时可以自定义。
# 在应用目录下创建一个templatetags目录添加自定义过滤
# myapp/templatetags/custom_filters.py
from django import templateregister template.Library()register.filter
def add_prefix(value, prefix):return f{prefix}{value}# 在模板中加载并使用{% load custom_filters %}
p{{ World|add_prefix:Hello, }}/p
Django URL解析 在一个Web应用中URL是用户与应用交互的入口。Django通过URL解析将用户请求与视图关联起来并根据URL模式决定调用哪个视图处理请求。本部分将深入讲解Django的URL解析机制、动态URL配置以及命名空间和反向解析的使用。 1. URL配置的基础
Django通过urls.py文件将URL模式映射到视图。
# 项目的urls.py文件
from django.contrib import admin
from django.urls import path
from myapp import views # 引入应用视图# 定义URL模式列表
urlpatterns [path(admin/, admin.site.urls), # 管理后台path(home/, views.home, namehome), # 静态路径绑定到视图
]# 示例视图返回简单的响应
# myapp/views.py
from django.http import HttpResponsedef home(request):return HttpResponse(Welcome to the Home Page!)访问路径 /home/ 将调用 home 视图返回 Welcome to the Home Page!。
2. 动态URL
动态URL允许捕获路径参数并传递到视图中。
# 定义动态URL
urlpatterns [path(article/int:article_id/, views.article_detail, namearticle_detail),
]# 视图函数处理动态参数
def article_detail(request, article_id):return HttpResponse(fArticle ID: {article_id})访问 /article/42/将显示 Article ID: 42。int:article_id 捕获整数类型的路径参数。
支持的动态参数类型
str字符串默认。int整数。slug短字符串。path带斜杠的字符串。uuidUUID格式。
3. 命名空间与反向解析
为提高可维护性可以为URL模式命名并通过反向解析动态生成URL。
# 定义带名称的URL
urlpatterns [path(home/, views.home, namehome), # 给URL模式命名为 home
]# 视图中使用反向解析生成URL
from django.urls import reversedef redirect_to_home(request):home_url reverse(home) # 根据名称动态生成URLreturn HttpResponse(fThe URL for home is: {home_url})# 模板中反向解析URL
# home.html
a href{% url home %}Go to Home/areverse(home) 返回 /home/。模板中的 {% url home %} 动态生成链接。
4. 命名空间
在大型项目中可以为每个应用的URL配置添加命名空间。
# 应用的urls.py文件
from django.urls import pathapp_name myapp # 定义命名空间urlpatterns [path(home/, views.home, namehome), # 定义命名URL
]# 主urls.py文件
from django.urls import includeurlpatterns [path(myapp/, include(myapp.urls)), # 引入应用URL
]# 模板中使用命名空间的反向解析
a href{% url myapp:home %}Go to MyApp Home/a使用 myapp:home 指定命名空间和URL名称避免冲突。
5. 正则表达式URL
对于复杂的路径需求可以使用re_path结合正则表达式定义URL。
from django.urls import re_path# 定义正则表达式URL模式
urlpatterns [re_path(r^article/(?Pyear\d{4})/$, views.article_by_year, namearticle_by_year),
]# 视图中接收正则表达式参数
def article_by_year(request, year):return HttpResponse(fArticles from year: {year})URL /article/2024/ 将返回 Articles from year: 2024。(?Pyear\d{4}) 捕获名为 year 的四位数字参数。
6. URL优化
Django提供了工具和技巧优化URL设计 使用include组织URL 将每个应用的URL配置拆分到独立文件中。
# 主urls.py
from django.urls import include
urlpatterns [path(blog/, include(blog.urls)), # 引入博客应用URL配置
]规范设计URL 避免嵌套过深的路径遵循RESTful设计原则例如 /users/用户列表。/users/id/单个用户详情。 从初识Django到逐步掌握模型、视图、模板再到URL解析如果你问我Django最大的魅力是什么我会说它的“有条不紊”。从后台逻辑到前端显示从简单的Hello World到复杂的数据库查询Django用一种条理清晰的方式让我们既能快速上手又能应对复杂场景。就像一个好用的工具箱拿出来就是各种好用的工具一切都那么顺理成章。 你可能已经开始计划用Django做点什么了。是一个简单的博客还是一个功能复杂的电商网站无论如何Django的学习远不止于此。它还有更多的高级特性等待你去探索Enjoy codingand keep building!