文章目录
1 Django介绍
Django是什么?
开源免费的 Python高级Web框架,内置电池,用于快速开发可靠、安全、可扩展的web应用。
获取帮助:
Django documentation | Django documentation | Django (djangoproject.com)
使用 Django框架的开发步骤:
- 步骤一:选择合适的版本
- 步骤二:安装及配置
- 步骤三:生成项目结构
- 步骤四:内容开发
- 步骤五:迭代、上线、维护
版本兼容情况:

版本支持情况:

2 Django开发基础知识
2.1 Django的安装
-
方式一:pip安装[推荐]
pip install django -
方式二:源码安装
python setup.py install

- 检测是否安装成功
import django
django.__version__

2.2 Django项目的创建
- 方式一:使用命令行生成模板
django-admin[.py] startproject my_project


- 方式二:使用 pyCharm创建项目



2.3 Djang项目结构

2.4 启动开发服务器
- 启动服务器(方式一)
python manage.py runserver

- 启动服务器(方式二)


启动成功:

3 Django开发流程讲解
3.1 项目导入
- 使用 django-admin创建的项目导入配置

配置:

配置界面:

3.2 reserver常用参数
- 指定端口
python manage.py runserver 9527


- 配置IP及端口
python manage.py runserver 0.0.0.0:9527
提示:需要在 settings.py配置 ALLOWED_HOSTS


3.3 创建模块
- 创建hello模块
python manage.py startapp hello


3.4 完成第一个页面
- 第一步:在views.py文件写个函数

- 第二步:在urls.py配置规则

- 重启服务器,访问:http://localhost:9527/hello/

4 Django从请求到响应
什么是视图?
-
一个视图函数,简称视图,是一个简单的 Python函数
def view_name()定义视图函数 -
接受一个请求,返回一个响应
URL的设计:
- 设计简单优雅的URL
- 使用正则表达式
- 指定参数类型
urlpatterns = [
path('admin/', admin.site.urls),
# 固定的类型
# /hello
# 指定参数类型
# /article/<int>
# /article/5001
# /article/5002
# 使用正则表达式
path('hello/',hello_world)
]
URL的常用配置:
path(route, view, name, **kwargs)函数- route:URL匹配规则
- view:视图函数
- name:路由的名称
- **kwargs:其它参数
include (urls, namespace)函数- urls:URL匹配规则列表
- namespace:命名空间
模块化管理



访问:
http://localhost:9527/hello/world/
http://localhost:9527/hello/china/


URL与视图的关系
- URL的正向解析

- URL的逆向解析



视图响应的内容
响应可以是:
- 文本
- HTML内容
- 图像
- 甚至是404、重定向等
5 Django在视图中处理业务逻辑
5.1 响应HTML内容
def view_name()定义视图
from django.http import HttpResponse
def hello_html(request):
""" 响应HTML内容 """
html = """
<html>
<body>
<h1 style="color:#f00">hello html</h1>
</body>
</html>
"""
return HttpResponse(html)



5.2 获取URL参数
-
获取URL中的指定类型的参数
URL规则:
path('article/<int:month>/') views.article,name='article_list'输入URL:
http://127.0.0.1:8000/article/05/视图编写:
def article(request, month): return HttpResponse('article:' + month)


-
获取URL中的正则匹配的参数
URL正则:
re_path(r'^article/(?P<month>0?[1-9]|1[012])/$',views.article, name='article_list')输入URL:
http://127.0.0.1:8000/article/05/视图编写:
def article(request, month): return HttpResponse('article:' + month)

1-12月正常访问:

不符合则报错误:

5.3 获取GET/POST参数
-
获取请求中(GET/POST等)参数
输入URL:
http://127.0.0.1:8000/search/?name=五月天视图编写:
def search(request): """ GET参数的获取 """ name = request.GET.get('name', '') print(name) return HttpResponse('查询成功')




6 Django从文件响应HTML内容
原理解析:
- 第一步,从磁盘读取HTML文件
- 第二步,替换HTML中的特殊字符
- 第三步,发送给浏览器
render_to_string()函数
render_to_string(
template_name, # 模板名称
context=None, # 请求对象
request=None, # 模板上下文对象(dict)
using=None # 模板引擎名称(如:Jinjia2)
)
- 新建模板文件夹

- 新建index.html文件

- 编写视图函数

- 配置url

- 配置模板地址

- 运行
http://127.0.0.1:9527/hello/render/str/

render()函数
render(
request, #请求对象
template_name, #模板名称
context=None, #模板上下文对象(dict)
content_type=None, #MIME类型,默认为text/html
status=None, #HTTP状态码
using=None #模板引擎名称(如:Jinjia2)
)
- 编写视图函数

- 配置urls

- 查看效果
http://127.0.0.1:9527/hello/render/html/

修改模板地址

- 在模块下建立文件夹

- 配置

- 修改视图函数

- 访问

- 原理解析:

7 Django请求响应对象

请求对象 HttpRequest
- 请求方式method(POST/GET/…)
- 请求头信息META/headers
- REMOTE_ADDR——请求的IP地址
- HTTP_USER_AGENT——用户请求终端信息
- 获取请求传递参数
- GET——GET请求参数
- POST——POST请求参数
- COOKIES——cookie信息
- FILES——文件信息
def http_request(request):
""" 请求练习 """
# 1. 请求方式
print(request.method)
return HttpResponse('响应')


- 修改视图函数
def http_request(request):
""" 请求练习 """
# 1. 请求方式
print(request.method)
# 2. 请求头信息
headers = request.META
print(headers)
ua = request.META.get('HTTP_USER_AGENT', None)
print(ua)
print(request.headers)
print(request.headers['User-Agent'])
# 3. 获取请求参数
name = request.GET.get('name', '')
print('name:',name)
return HttpResponse('响应')
- 访问:

- 控制台打印信息

响应对象
- HttpResponse
- HttpResponseRedirect——重定向
- JsonResponse——响应json
- FileResponse——响应文件
响应对象之间的关系


HttpResponse
-
status设置HTTP响应状态码
-
status_code查看HTTP响应状态码
-
content_type设置响应的类型
-
write()写入响应内容
def http_response(request):
""" 响应练习 """
resp = HttpResponse('响应内容', status=201)
resp.status_code = 204
print(resp.status_code)
return resp
JsonResponse
- 示例代码
from django.http import JsonResponse
response = JsonResponse({
'username':'admin',
'passwd':'123456',
'sex':'男'
})
FileResponse
- 示例代码
from django.http import FileResponse
response = FileResponse(open('myfile.png','rb'))
常见的 Content-Type
- text/html——超文本标记语言文本(HTML)
- text/plain——普通文本
- text/xml——XML文档
- image/png、image/jpeg、image/gif——图片或图形
- application/json——json数据类型
8 Django视图快捷方法
什么是重定向?

实现URL访问的重定向:
- 使用 HttpResponseRedirect 重定向
- 使用redirect()快捷方式
使用 HttpResponseRedirect 重定向
def no_data_404(request):
""" 404 页面"""
return HttpResponse('404')
def article_detail(request, article_id):
"""
文章详情,ID是从1000开始的整数
:param article_id 文章ID
"""
if article_id < 1000:
return HttpResponseRedirect(reverse('no_data_404'))
return HttpResponse('文章{}的内容'.format(article_id))

- 效果

访问:http://localhost:9527/hello/article/99/
会自动重定向

使用redirect()快捷方式
def article_detail(request, article_id):
"""
文章详情,ID是从1000开始的整数
:param article_id 文章ID
"""
if article_id < 1000:
# return HttpResponseRedirect(reverse('no_data_404'))
# return redirect('no_data_404')
# return redirect('/hello/404/')
return redirect('https://www.baidu.com/')
return HttpResponse('文章{}的内容'.format(article_id))
9 Django内置的视图及重写
内置的错误处理视图:
- 400 Bad Request
- 403 Forbidden
- 404 Not Found
- 500 Internal Server Error
重写内置的错误处理视图
- 在项目urls.py中添加配置
- hander500 = ‘my_project.views.page_500’
- hander400
- hander403
- hander404
- 切换到生产模式DEBUG=False

- 新建views文件

- 自定义500位置

- 500的时候就显示自己定义的界面了

static.serve处理静态文件
-
在项目setting.py中添加配置
MEDIA_URL = '/media' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias') -
在项目urls.py中添加配置
from django.views.static import serve urlpatterns += [ re_path(r'^media/(?P<path>.*)$',serve,{ 'document_root':settings.MEDIA_ROOT, }), ]


10 Django使用class重写视图
基于类的视图
- 视图是一个可调用对象,可以接收一个请求然后返回一个响应
- 基于类的视图可以结构化你的视图
- 基于类的视图可以利用继承和混合重用代码
- 内置的视图拿来即用,代码更简洁
举例:TemplateView
-
步骤一:继承视图
django.views.generic.TemplateViewfrom django.views.generic import TemplateView class HomeView(TemplateView): template_name = 'home.html' -
步骤二:配置模板地址
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>home</h1> </body> </html> -
步骤三:配置URL
from hello.views import HomeView path('home/', HomeView.as_view(), name='home')
TemplateView原理解析
- 从项目主目录寻找模板文件
- 从app的模板目录寻找模板文件
内置通用视图
-
django.views.generic.ListView
列表类数据的封装,如:景点列表支持分页
-
django.views.generic.DetailView
详情类数据的封装,如:景点详情
看清类视图的本质
-
class ListView(MutipleObjectTemplateResponseMixin, BaseListView)

本文详细介绍Django框架的基础知识,包括安装配置、项目结构、开发流程等,并深入讲解视图处理、请求响应机制及类视图的应用。
71万+

被折叠的 条评论
为什么被折叠?



