首页 > 其他分享 >Django路由和视图(筛选)

Django路由和视图(筛选)

时间:2024-10-08 18:21:34浏览次数:11  
标签:name request 视图 Django auth print path login 路由

温习

温故知新

1. 路由分发

方式一:include

from django.urls import path, include

urlpatterns = [
    path('app/', include('app.urls'))
]

方式二:手工分发

urlpatterns = [
    # path('user/login/', login, name='login'),
    # path('user/logout', logout, name='logout')
    path('user/', ([
        path('login/', login, name='login'),
        path('logout/', logout, name='logout')
                   ], None, None))
]

手工分发纯粹帮忙提取功能的URL,防止重写,接触的项目多了,这个方式会遇到

2. name

2.1 无参数的反向解析

urlpatterns = [
    path('user/login/', login, name='login'),
    path('user/auth/', index, name='auth')
]

在路由中,可以添加 name, 有了 name 后,可以用到视图函数或者HTML模版中

  • 视图View
from django.urls import reverse
from django.shortcuts import redirect

url = reverse('login') # /user/login/
url = reverse('auth') # /user/auth/
  • HTML模版
<a href="{% url 'auth' %}">跳转</a>

模版中, url 通过反向解析 name,得出 url 放到 html 页面当中

2.2 带参数的反向解析

urlpatterns = [
    path('login/<str:role>/', login, name='login'),
    re_path('auth/(\d+)/(\w+)/', index, name='auth'),
    re_path('home/(?P<nid>\d+)/(?P<name>\w+)/', home, name='home')

]
  • 视图View
from django.urls import reverse
from django.shortcuts import redirect

url = reverse('login', kwargs={'role':'man'}) # /login/man/
url = reverse('auth', args=(123, 'auth') # /auth/123/auth/
url = reverse('home', kwargs={'nid': 123, 'name':'aqiang'}) # /home/123/aqiang/
  • HTML模版
<a href="{% url 'auth' 123 'auth' %}">跳转</a>
<a href="{% url 'login' role='aqiang' %}">跳转</a>

3. namespace

用来辅助 name 的作用

  • 主路由

    from django.urls import path, re_path, include
    
    urlpatterns = [
        path('api/', include("apps.api.urls",namespace='x1')),
        path('web/', include("apps.web.urls",namespace='x2')),
    ]
    
  • api/urls

    from django.urls import path, re_path
    from . import views
    urlpatterns = [
        path('login/', views.login,name="login"),
        path('auth/', views.auth, name='auth'),
    ]
    
  • web/urls

    from django.urls import path, re_path
    from . import views
    urlpatterns = [
        path('home/', views.home,name='home'),
        path('order/', views.order,name='order'),
        path('auth/', views.order, name='auth'),
    ]
    

以后在不同的组件中若有相同的 name,可以通过 namespace 确定是哪一个路由

from django.urls import reverse
url = reverse("x1:login")    # /api/login/
url = reverse("x1:order")    # /web/login/


url = reverse("x1:auth")    # /api/login/
url = reverse("x2:auth")    # /web/login/

4. request

from django.shortcuts import HttpResponse

def login(request):
    # 1.当前URL  /api/login/
    print(request.path_info)

    # 2.URL传递的参数
    print(request.GET)
    print(request.GET.get("age"))

    # 3.请求方式  GET/POST
    print(request.method)

    # 4.如果post请求,传递请求体(原始数据)
    print(
        request.body)  # b'{"code":"083Sjmll2yla694F3bll2DguCM2SjmlG","unionId":"oP6QCsyT_9bk1dfSaVf0GEV5Y-yE"}'  b'v1=123&v2=456'

    # 4.1 请求体+请求头       b'v1=123&v2=456'  +  content-type:application/x-www-form-urlencoded
    print(request.POST)
    print(request.POST.get("v1"))
    print(request.POST.get("v2"))

    # 4.2 请求体+请求头   文件
    print(request.FILES)  # 文件格式           + multipart/form-data
    print(request.FILES.get("n1"))
    print(request.FILES.get("n2"))

    # 5.请求头
    # {'Content-Length': '', 'Content-Type': 'text/plain', 'Host': '127.0.0.1:8000', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Sec-Ch-Ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"', 'Sec-Ch-Ua-Mobile': '?0', 'Sec-Ch-Ua-Platform': '"macOS"', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7', 'Cookie': 'csrftoken=CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy'}
    print(request.headers)

    # 5.1 请求头有个特殊的cookie
    # request.headers['cookie']  # 'csrftoken=CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy;session=xxxx'
    # {'csrftoken': 'CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy'}
    print(request.COOKIES)

    # 6.requests中其他值
    print(request.resolver_match)

    return HttpResponse("login")

5. 静态文件

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
  • 顺序:…

  • 多app开发:各自app的图片放在各自 /static/app名字/…

  • 在开发过程中

    • 禁止
    <img src="/static/api/1.png">
    
    • 建议
    {% load static %}
    ...
    <img src="{% static 'api/1.png' %}">
    

标签:name,request,视图,Django,auth,print,path,login,路由
From: https://blog.csdn.net/weixin_53970868/article/details/142554442

相关文章

  • 计算机毕业设计 基于Python的荣誉证书管理系统的设计与实现 Python毕业设计 Python毕
    博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌......
  • 【开题报告】基于django+vue楼盘销售系统(论文+源码) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着房地产行业的蓬勃发展,楼盘销售管理的复杂性和效率要求日益提升。传统的手工记录与线下销售模式已难以满足当前市场快速变化的需求。特......
  • <免费开题>登录网站验证码的生成与识别系统(django)|全套源码+文章lw+毕业设计+课程设计
    <免费开题>登录网站验证码的生成与识别系统(django)|全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要近年来随着互联网应用技术的飞速发展,为了确保网站系统平台的安全性,各类网站相继推出了验证码应用技术,通过验证码的应用来帮助缓解暴力破解账户密码、垃圾邮件攻击以及在......
  • [含文档+PPT+源码等]精品大数据项目-Django基于朴素贝叶斯实现的乡村旅游评论分析系统
    大数据项目——Django基于朴素贝叶斯实现的乡村旅游评论分析系统背景,可以从以下几个方面进行详细阐述:一、项目背景与意义随着乡村旅游的蓬勃发展和游客对旅游体验要求的日益提高,乡村旅游评论成为游客反馈旅游体验、旅游企业了解市场动态和游客行为的重要途径。然而,传统的评论......
  • [含文档+PPT+源码等]精品大数据项目-基于Django实现的汽车数据分析与可视化系统
    大数据项目——基于Django实现的汽车数据分析与可视化系统背景,可以从以下几个方面进行详细阐述:一、项目背景与意义在数字化和信息化的时代背景下,汽车行业正面临着前所未有的机遇与挑战。随着市场竞争的加剧、消费者需求的多样化以及技术的不断进步,汽车企业需要对市场进行深入......
  • django rest_framework面经
    1、什么是drf组件drf的全称是DjangoRESTfulFramework;它是一个基于django开发的组件,本质是一个django的app;drf可以帮我们快速开发出一个遵循restful规范的程序。2、drf组件提供的功能1.免除csrf认证2.视图(三种:(1)APIView,(2)ListAPIview,(3)GenericViewSet)3.版本处理4......
  • 【开题报告】基于django+vue自习室管理系统(论文+程序)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着教育资源的日益紧张,自习室成为高校学生学习的重要场所。然而,传统的自习室管理模式存在诸多不便,如学生预约难、教室资源分配不均、使用......
  • 【开题报告】基于django+vue驾校管理系统的设计与实现(论文+源码) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车普及率的不断提升,驾校行业迎来了前所未有的发展机遇与挑战。传统驾校管理模式往往依赖于纸质文档和人工操作,不仅效率低下且易出错......
  • django + redis + celery 异步任务
    目录结构E:.│db.sqlite3│Dockerfile│manage.py│requirements.txt│├─celery_tasks#自定义一个celery的工作目录││config.py#celery配置文件││__init__.py│││├─sms│tasks.py#worker任务│__init__.py│......
  • 基于django+vue+Vue的高校设备信息管理系统的设计与实现【开题报告+程序+论文】-计算
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高校教育事业的蓬勃发展,各类教学科研设备的数量急剧增加,设备信息管理成为高校管理中的重要环节。传统的人工管理方式不仅效率低下,而且......