Django中设置路由参数

本文介绍了在Django中如何设置路由参数,包括urls.py中的路由配置和views.py中的视图处理。通过示例展示了如何处理文章详情、评论、收藏和点赞等功能的路由,并强调了@login_required装饰器的使用以及get_object_or_404方法在确保数据安全方面的作用。
1.urls.py中写入
# -*- coding: utf-8 -*-
import sys

reload(sys)

sys.setdefaultencoding('utf8')
from django.conf.urls import url

# .代表当前目录
# ..代表上级目录
from . import views

urlpatterns = [
    # 通过localhost:8000/app/路径,也可以访问到网站的首页
    url(r'^$',views.index,name='app_index'),
    # 登录的路由
    url(r'^login/',views.log_in,name='login'),
    # 注销的路由
    url(r'^logout/$',views.log_out,name='logout'),
    # 注册的路由
    url(r'^register/$',views.register,name='register'),
    # 配置文章详情的路由  <article_id>,用于接收前端a标签传递的id,并传给相应的视图函数
    url(r'^(?P<article_id>[0-9]+)/$',views.article,name='article'),
    # 配置评论路由
    url(r'(?P<article_id>[0-9])/comment/$',views.comment,name='comment'),
    # 配置收藏路由
    url(r'(?P<article_id>[0-9])/keep/$', views.keep, name='keep'),
    # 配置点赞路由
    url(r'(?P<article_id>[0-9])/poll/$', views.poll, name='poll'),

]
2.views.py视图中写入
# 设置文章详情页面的视图函数
# @login_required要求必须先登录,才能访问Article的视图函数,否则会要求先登录
@login_required
def article(request,article_id):
    # get_object_or_404():是在查询模型对象时,如果该对象不存在,那么就显示Django内置的404页面展示给用户,比直接显示异常信息更加友好。
    article_obj = get_object_or_404(Article,id=article_id)

    # 文章的内容
    content = article_obj.content
    # 文章标题
    title = article_obj.title
    # 文章的所有评论
    comments = article_obj.comment_set.all()

    # 创建LoginFormCommentForm表单,渲染到article_page.html中显示
    commentform = CommentForm()
    loginform = LoginForm()

    return render(request,'article_page.html',{
        'article_title':title,# 标题
        'article':article_obj,# 文章对象
        'loginform':loginform,#登录表单
        'commentform':commentform,#评论表单
        'content':content,#文章内容
        'comments':comments,#文章的所有评论
    })

Django设置WebSocket路由,你需要使用Django Channels库来支持实时通信。首先,确保安装了channels包(如果尚未安装,可以运行`pip install channels daphne asgi-websocket`)。以下是设置WebSocket路由的基本步骤: 1. **更新settings.py**: 在`INSTALLED_APPS`列表中添加`channels`和相关的插件,如`django-asgiref`, `channels.routing` 等: ```python INSTALLED_APPS = [ ..., # 添加这些 'channels', 'daphne', 'asgi_websocket', ] ``` 2. **创建应用级别的`asgi.py`文件**: 在你的应用目录下,创建一个名为`asgi.py`的文件,这是Django ASGI应用程序的入口点: ```python import os import django from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application from your_app.routing import websocket_urlpatterns os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings") django.setup() application = ProtocolTypeRouter({ 'http': get_asgi_application(), 'websocket': URLRouter(websocket_urlpatterns), }) ``` 其中`your_app.routing.websocket_urlpatterns`是你定义的所有WebSocket路由的地方。 3. **定义WebSocket路由**: 在你的应用的`routing.py`文件中,使用`channel_routing`装饰器来定义WebSocket路由。例如: ```python from channels.generic.websocket import AsyncWebsocketConsumer from django.urls import re_path class MyWebsocketConsumer(AsyncWebsocketConsumer): async def connect(self): await self.accept() # 连接成功后的操作 async def disconnect(self, close_code): # 断开连接时的操作 async def receive(self, text_data): # 接收客户端消息并处理 websocket_urlpatterns = [ re_path(r'^ws/chat/(?P<room_name>\w+)/$', MyWebsocketConsumer.as_asgi()), ] ``` 这里的`re_path`是一个正则表达式,`(?P<room_name>\w+)`是参数匹配,可以根据实际需求调整。 4. **启动Daphne**: Daphne是Django Channels的一个组件,负责处理HTTP以外的协议(包括WebSocket)。启动命令通常像这样: ``` python manage.py run_daphne your_project.asgi:application --port <your_port> ``` 现在你可以开始编写WebSocket消费者类来处理双向通信了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值