【5.0】Django框架入门之小白必会三板斧
【一】Django项目如何添加新功能
-
启动django项目之后 如何添加更多的功能
-
回想自己编写的web框架 如果要添加功能 就去urls.py和views.py
【1】添加URL映射
- 在项目的
urls.py
文件中,通过导入相应的应用(app)及其视图函数,并使用path()
或include()
函数来定义 URL 映射规则。 - 例如,如果要在名为 "myapp" 的应用中添加一个用于显示博客文章列表的 URL,则可以在
urlpatterns
中添加如下配置
from django.urls import path
from . import views
urlpatterns = [
path('blog/', views.blog_list, name='blog_list'),
]
- 这将把 "/blog/" 映射到
views.blog_list
视图函数。
【2】添加视图函数
- 然后,在对应的 "myapp/views.py" 文件中,创建视图函数以处理 HTTP 请求。
- 例如,
blog_list
可能如下实现:
from django.shortcuts import render
from .models import BlogPost
def blog_list(request):
posts = BlogPost.objects.all()
return render(request, 'myapp/blog_list.html', {'posts': posts})
- 这里假设有一个名为 "BlogPost" 的模型,并有一个包含模板
blog_list.html
的对应 HTML 模板文件。
【二】三板斧(返回HTTP响应、渲染HTML和重定向)
【1】HttpResponse
HttpResponse
: 这是 Django 自带的类,用于构建基本的 HTTP 响应。- 例如,当需要返回纯文本或 JSON 数据时,可以这样创建响应:
from django.http import HttpResponse
from django.utils import json
def some_view(request):
data = {"key": "value"}
response = HttpResponse(json.dumps(data), content_type="application/json")
return response
【2】render
-
主要用于返回html文件 并且支持模板语法(django自己写的)
-
render()
: 这个函数用于从给定的模板加载内容,并将其插入到 HTTP 响应中作为 HTML 内容发送给客户端。 -
例如,在上面的
blog_list
视图中,我们使用了它来返回带有博客文章列表的 HTML:
from django.shortcuts import render
def blog_list(request):
posts = BlogPost.objects.all()
context = {'posts': posts}
return render(request, 'myapp/blog_list.html', context)
【3】redirect
-
主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀
-
redirect()
: 该函数用于向用户返回一个 HTTP "Redirect" 响应,使浏览器跳转至指定的 URL。 -
例如,点击博客文章详情页链接时,可能用到如下代码:
from django.shortcuts import redirect
from .models import BlogPost
def blog_detail(request, post_id):
try:
post = BlogPost.objects.get(pk=post_id)
except BlogPost.DoesNotExist:
return HttpResponse("Post not found", status=404)
# 处理完逻辑后,将用户重定向至文章详情页
return redirect('myapp:blog_post_detail', pk=post.id)
- 在这个例子中,
'myapp:blog_post_detail'
是在urls.py
中定义的详细文章详情页面的 URL 名称,pk=post.id
表示要传递的文章 ID 参数。
【补充】django自带重启功能
- 当识别到项目中代码有变化之后 隔段时间会自动重启 但是有时候较慢
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/18036054