Django简介
什么是Django
Django是一个开源的Python Web框架,由Django Software Foundation开发和维护。Django的目标是让Web开发更加快速、简单和高效,提供了许多内置的功能和库,如ORM、模板引擎、表单处理、认证、管理后台等。
1.2 Django的优点及特点
- 高效快速:Django提供了许多内置的功能和库,可以快速构建复杂的Web应用程序。
- 安全稳定:Django提供了许多安全性功能,如CSRF保护、XSS保护、SQL注入保护等,可以保证Web应用程序的安全性和稳定性。
- 可扩展性:Django提供了许多可扩展的功能和库,如第三方插件、中间件、信号等,可以根据需要扩展和定制Web应用程序。
- 易于维护:Django提供了许多内置的功能和库,可以减少代码量和重复工作,使得Web应用程序易于维护和升级。
- 社区活跃:Django拥有庞大的社区和生态系统,提供了许多第三方插件和库,可以快速解决各种问题和需求。
Django的应用场景
- 大型Web应用程序:Django适用于大型Web应用程序的开发,可以快速构建复杂的Web应用程序。
- CMS系统:Django提供了许多内置的功能和库,如ORM、模板引擎、管理后台等,适用于CMS系统的开发。
- 社交网络:Django提供了许多内置的功能和库,如认证、权限、信号等,适用于社交网络的开发。
- 电子商务:Django提供了许多内置的功能和库,如ORM、表单处理、支付等,适用于电子商务的开发。
Django、Flask和FastAPI对比
- Django:Django是一个全功能的Web框架,提供了许多内置的功能和库,如ORM、模板引擎、表单处理、认证、管理后台等。Django适用于大型Web应用程序的开发,可以快速构建复杂的Web应用程序。Django的缺点是相对于其他框架来说比较重量级,需要一定的学习成本。
- Flask:Flask是一个轻量级的Web框架,提供了基本的功能和库,如路由、模板引擎、请求和响应处理等。Flask适用于小型Web应用程序的开发,可以快速构建简单的Web应用程序。Flask的优点是灵活性高,可以根据需要选择和集成各种库和插件。Flask的缺点是需要手动安装和配置各种库和插件,需要一定的技术水平。
- FastAPI:FastAPI是一个异步高性能Web框架,提供了高性能和易用性的特点,支持异步编程和类型注解。FastAPI适用于需要高性能和高并发的Web应用程序的开发,可以快速构建高效的Web应用程序。FastAPI的优点是性能高、易用性好、文档丰富,支持异步编程和类型注解。FastAPI的缺点是相对于其他框架来说还比较新,生态系统和社区还不够完善。
Django安装和配置
Django安装、创建项目及App
安装Django
pip install django
创建项目
django-admin startproject myproject
创建App
cd myproject
python3 manage.py createapp myapp
注册App:修改myproject/settings.py, 在INSTALLED_APPS中添加myapp
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
启动开发服务器
python3 manage.py runserver
Django项目结构介绍
myproject /
├── manage.py # 命令行管理工具
├── myapp / # 应用目录
│ ├── __init__.py
│ ├── admin.py # 应用管理后台配置
│ ├── apps.py # 应用配置
│ ├── migrations / # 应用数据库迁移脚本目录
│ ├── models.py # 应用数据库模型配置
│ ├── tests.py # 应用测试脚本
│ └── views.py # 应用接口编写
└── myproject / # 项目目录
├── __init__.py
├── asgi.py # 异步ASGI部署配置
├── settings.py # 项目设置
├── urls.py # 项目总接口路由
└── wsgi.py # WSGI部署配置
此外根据实际需要还可以在myapp中添加
- url.py # 应用子接口路由
- static / # 应用静态文件目录
- templates / # 应用模板目录
- templatetags / # 应用自定义模板标签目录
Django配置文件介绍
- DEBUG:用于开启或关闭调试模式,调试模式下会显示详细的错误信息和调试信息。
- ALLOWED_HOSTS:用于设置允许访问Django应用程序的主机名或IP地址。
- DATABASES:用于配置数据库连接信息,包括数据库类型、主机名、端口号、用户密码等。
- INSTALLED_APPS:用于配置Django应用程序中安装的应用程序列表。
- MIDDLEWARE:用于配置Django应用程序中使用的中间件列表。
- STATIC_URL:用于配置静态文件的URL前缀。
- TEMPLATES:用于配置Django应用程序中使用的模板引擎和模板选项。
- TIME_ZONE:用于配置时区信息,如Asia/Shanghai
- LANGUAGE_CODE:用于配置语言代码,如zh-hans
- STATICFILES_DIRS:用于配置静态文件的目录列表(默认无该项),如 STATICFILES_DIRS=[BASEDIR / 'static']
Django使用MySQL数据库
安装MySQL客户端 pip install mysqlclient 如果安装不上,可以换成pip install pymysql, 并在settings.py同级目录的__init__.py中添加
import pymysql
pymysql.install_as_MySQLdb()
•数据库配置
在settings.py中修改DATABASES配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject', # 需要手动创建库
'USER': 'root',
'PASSWORD': 'passw0rd',
'HOST': 'localhost',
'PORT': '3306'
}
}
Django启用静态服务显示图片
安装pillow
pip install pillow
媒体配置,在settings.py中修改添加media相关配置
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "media"
启用静态服务URL,在urls.py中修改添加media相关配置
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Django编写接口
•编写视图函数
•编辑app/views.py,定义接口(视图)
from django.http import JsonResponse
def hello(request):
data = { 'message': 'Hello, World!'}
return JsonResponse(data)
注册接口路由
编辑myproject/urls.py,导入接口并关联接口地址
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.hello, name='hello'),
]
浏览器访问 http://127.0.0.1:8000/hello/ 查看效果。
获取接口参数
获取GET请求Query参数
def hello(request):
msg = request.GET.get(‘msg’)
# ...
获取POST请求JSON数据
def hello(request):
data = json.loads(request.body)
msg = data.get(‘msg’)
# ...
获取POST请求FORM参数
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 需要关闭csrf token验证
def hello(request):
msg = request.POST.get(‘msg’)
# ...
获取接口路径参数
url配置中添加参数
# myproject/url.py
...
urlpatterns = [
path('hello/<msg>', views.hello, name='hello'),
]
接口函数中添加对应参数
# myapp/views.py
def hello(request, msg):
# ...
返回不同的响应
返回普通HTTP响应
from django.http import HttpResponse
def hello(request):
html = '<h1>Hello, world!</h1>'
return HttpResponse(html) #支持指定状态码及内容类型
返回JSON响应
from django.http import JsonResponse
def hello(request):
data = {'message': 'Hello, World!'}
return JsonResponse(data)
重定向到其他接口
from django.http import HttpResponseRedirect
def hello(request):
return HttpResponseRedirect('/hi')
渲染并返回HTML模板
{#myapp/templates/hello.html#}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
# myapp/views.py
from django.shortcuts import render
def hello(request):
data = {'message': 'Hello, World!'}
return render(request, 'hello.html', data)
返回文件
import os
from django.http import FileResponse
from django.conf import settings
def hello(request):
file_path = os.path.join(settings.MEDIA_ROOT, ‘my_file.txt’)
return FileResponse(open(file_path, ‘rb’), as_attachment=True) # 不加as_attachment=True则返回文件原始内容
返回错误常见HTTP错误
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound, HttpResponseServerError
def hello(request):
# return HttpResponse('400 Bad request', status=400)
# return HttpResponseBadRequest('400 Bad request')
# return HttpResponseBadRequest('404 Not found')
return HttpResponseBadRequest('500 Internal Server Error')
Django路由配置
在Django中,路由配置用于将URL映射到相应的视图函数或类。通过路由配置,可以定义应用程序中的URL模式,以便Django能够正确地将请求路由到相应的处理程序。
- path
- re_path
- include
路由名称及反向查找 - reverse()
- redirect()