python-Django-URL 路由(二)
Django URL路由的示例
下面是一个简单的Django应用程序的示例,它使用URL路由来处理客户端请求。这个示例应用程序提供了一个简单的博客系统,允许用户浏览博客文章、创建新文章和编辑现有文章。
首先,我们定义一个名为“blog”的Django应用程序,并在其中创建一个名为urls.py的文件:
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的文件中::
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模板。
相关文章
- pycharm提示no python interpreter_pycharm代码运行不了
- Python进阶34-Django 中间件
- Python进阶33-Django cookie和session
- pythoncharm解释器_pycharm自带python
- Python爬虫之数据写入
- python解压bz2文件命令,在Python中解压缩.bz2文件
- python中dtype的使用规范_Python numpy.dtype() 使用实例
- python chr()和ord()_Python函数ord
- 【说站】python导入类的不同方式
- Python的正则表达式_python正则表达式例子
- pycharm jinja2_Python django
- python lambda表达式 if_Python学习-lambda表达式
- 在python中用来安装第三方库的常用工具_什么库用于安装管理Python扩展包
- python django 数据库_Apache+Mysql+PHP/Python简单项目
- python 图像处理库_Python图像处理库
- python中if判断语句的用法_Python if判断语句的用法详细介绍[通俗易懂]
- 使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件(上篇)
- python-Django-Django 模型层的关联关系(一)
- python-Django-URL 路由(一)
- Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型|附代码数据
- Python开发系列课程(21) – Django 2.x实战(01) – 快速上手详解编程语言
- python:面向对象高级编程详解编程语言
- python:dict vs list vs set详解编程语言
- Python玩转Redis:提升缓存效率(python使用redis)
- python从MSSQL到Python:一段跨语言的旅程(mssql除以)
- Linux中如何离开Python环境(linux怎么退出python)
- Linux系统下安装Python模块指南(linux安装python模块)
- python计算书页码的统计数字问题实例