首页
学习
活动
专区
圈层
工具
发布
37 篇文章
1
python-Django-安装与配置(一)
2
python-Django-安装与配置(二)
3
python-Django-基础概念(一)
4
python-Django-基础概念(二)
5
python-Django 模型层-模型层简介
6
python-Django 模型层-模型层示例
7
python-Django-命令行工具
8
python-Django 模型层-模型层的字段类型
9
python-Django-Django 模型层的关联关系(一)
10
python-Django-Django 模型层的关联关系(二)
11
python-Django-Django 数据库迁移(一)
12
python-Django-Django 数据库迁移(二)
13
python-Django-Django 视图层简介(一)
14
python-Django-Django 视图层简介(二)
15
python-Django-URL 路由(一)
16
python-Django-URL 路由(二)
17
python-Django-视图函数(一)
18
python-Django-视图函数(二)
19
python-Django-Django 模板引擎(一)
20
python-Django-Django 常用模板标签和过滤器(一)
21
python-Django-Django 常用模板标签和过滤器(二)
22
python-Django-表单基础概念
23
python-Django-Django 表单简介
24
python-Django-表单验证(一)
25
python-Django-表单验证(二)
26
python-Django-文件上传(一)
27
python-Django-文件上传(二)
28
python-Django-文件上传(三)
29
python-Django 高级特性-Django 中间件(一)
30
python-Django 高级特性-Django 中间件(二)
31
python-Django 高级特性-Django 缓存(一)
32
python-Django 高级特性-Django 缓存(二)
33
python-Django 高级特性-Django 分页(一)
34
python-Django 高级特性-Django 分页(二)
35
python-Django 高级特性-Django 异步任务(一)
36
python-Django 高级特性-Django 安全(一)
37
python-Django 高级特性-Django 安全(二)
清单首页django文章详情

python-Django-URL 路由(二)

Django URL路由的示例

下面是一个简单的Django应用程序的示例,它使用URL路由来处理客户端请求。这个示例应用程序提供了一个简单的博客系统,允许用户浏览博客文章、创建新文章和编辑现有文章。

首先,我们定义一个名为“blog”的Django应用程序,并在其中创建一个名为urls.py的文件:

代码语言:javascript
复制
from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('post/create/', views.post_create, name='post_create'),
    path('post/<slug:slug>/', views.post_detail, name='post_detail'),
    path('post/<slug:slug>/edit/', views.post_edit, name='post_edit'),
]

在这个示例中,我们定义了四个不同的URL模式。第一个URL模式是空字符串,它将请求映射到我们之前定义的post_list视图函数。第二个URL模式是“post/create/”,它将请求映射到我们之前定义的post_create视图函数。第三个URL模式是“post/slug:slug/”,它将请求映射到我们之前定义的post_detail视图函数,并使用一个命名捕获组来表示文章的slug。最后一个URL模式是“post/slug:slug/edit/”,它将请求映射到我们之前定义的post_edit视图函数,并使用一个命名捕获组来表示文章的slug。

接下来,我们定义这些视图函数。在这个示例中,我们将这些视图函数定义在名为views.py的文件中::

代码语言:javascript
复制
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic.edit import CreateView, UpdateView
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.utils.text import slugify
from .models import Post

@login_required
def post_create(request):
    if request.method == 'POST':
        title = request.POST['title']
        content = request.POST['content']
        slug = slugify(title)
        post = Post.objects.create(
            author=request.user,
            title=title,
            content=content,
            slug=slug,
        )
        return redirect('blog:post_detail', slug=slug)
    return render(request, 'blog/post_create.html')

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'blog/post_detail.html', {'post': post})

@login_required
def post_edit(request, slug):
    post = get_object_or_404(Post, slug=slug)
    if request.method == 'POST':
        post.title = request.POST['title']
        post.content = request.POST['content']
        post.slug = slugify(post.title)
        post.save()
        return redirect('blog:post_detail', slug=post.slug)
    return render(request, 'blog/post_edit.html', {'post': post})

class PostList(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content']
    success_url = reverse_lazy('blog:post_list')

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.instance.slug = slugify(form.instance.title)
        return super().form_valid(form)

post_list = PostList.as_view()

在这个示例中,我们定义了四个视图函数。第一个视图函数是post_create,它允许用户创建新的博客文章。如果请求方法是POST,视图函数将获取用户提交的文章标题和内容,并创建一个新的Post对象,然后将用户重定向到新创建的文章的详细页面。如果请求方法是GET,视图函数将渲染一个包含创建新文章表单的HTML模板。

第二个视图函数是post_detail,它显示单个博客文章的详细信息。视图函数获取文章的slug,并使用get_object_or_404函数从数据库中获取文章对象。然后,视图函数将文章对象传递给包含文章详细信息的HTML模板。

第三个视图函数是post_edit,它允许用户编辑现有的博客文章。如果请求方法是POST,视图函数将获取用户提交的文章标题和内容,并更新现有的Post对象,然后将用户重定向到更新后的文章的详细页面。如果请求方法是GET,视图函数将渲染一个包含编辑现有文章表单的HTML模板。

最后一个视图函数是PostList,它显示所有博客文章的列表,并允许用户创建新的博客文章。这个视图函数使用Django的通用视图类CreateView来处理创建新文章的表单,然后重定向到post_list视图函数,这个视图函数将渲染一个包含所有文章的列表的HTML模板。

下一篇
举报
领券