【Django2x 学习笔记 03】创建path路由url(创建新路由URL,pathinfo模式多个传参,GET模式多个传参,返回json)

注意:Django2.1.3 下环境,Python3.7,基于最新的语言和框架的特性。

#1 已新建一个Django项目工程——mysite(假设:F = /django/mysite/ 目录)

django-admin startproject mysite

#2 创建一个简单的path路由:

1. 创建一个功能模块blog:

D:\python\do\django\mysite>python manage.py startapp blog

D:\python\do\django\mysite>

此时F下多出一个blog/ 目录。

-

2. F/mysite/下的settings.py注册blog(经过实验,写不写无所谓。连接数据库时才会用到。)

INSTALLED_APPS = [
    。。。。。
    。。。。。
    'blog',
]

3. F/mysite/下的urls.py 添加blog路由:

from blog import views  # 导入试图模块
# python manage.py runserver 8080

urlpatterns = [
    path('admin/', admin.site.urls),

    path('test/', views.test),  # 新路由
]

4. F/blog/下的views.py设置输出函数:

from django.http import HttpResponse


def test(request):
    print(request)
    return HttpResponse('route is success')

5. 启动项目:

python manage.py runserver 8080

-#3 新增一个带参数url:

1. 兼容模式GET请求URL带参数:

F/mysite/urls.py,直接创建一个路由名称即可,不用pathinfo模式正则/xx/yy:

path('data1/', views.data1),  # 携带一个或者多个参数

F/blog/views.py,这个你要理解request参数的妙用:

def data1(request):  # GET传参
    if 'p1' in request.GET or 'p2' in request.GET:
        message = '内容为: p1=' + str(request.GET.get('p1')) + '== p2=' + str(request.GET.get('p2'))
    else:
        message = '空get'
    return HttpResponse(message)

浏览器查看:

http://localhost:8080/data1/?p1=1&p2=ha

2. pathinfo URL带参数(实际上是另一种方式的GET传参),一些nginx服务器可能需要这种模式:

F/mysite/urls.py,参数写为<xx>

path('data2/p1/<p1>/p2/<p2>/', views.data2),  # pathinfo携带参数

F/mysite/views.py,:

def data2(request, p1, p2):  # pathinfo传参
    msg = 'p1=' + str(p1) + '== p2=' + str(p2)

    return HttpResponse(msg)

浏览器查看:

-

注意:本片篇博客未涉及 Django模板渲染、path分组等问题,完全是面向接口的思考模式。

-

#4 返回json,并处理中文乱码:

需要 import json ,

返回请求:

return HttpResponse(json.dumps(message, ensure_ascii=False), content_type='application/json; charset=utf-8')

注意, content_type里面是英文分号,不是英文逗号。

def json1(request, p1, p2):
    message = {
        'p1': p1,
        'p2': p2,
    }
    return HttpResponse(json.dumps(message, ensure_ascii=False), content_type='application/json; charset=utf-8')

-------

所有代码:

1)F/blog/urls.py

from blog import views
# python manage.py runserver 8080

urlpatterns = [
    path('admin/', admin.site.urls),

    path('', views.index),  # 空目录
    path('test/', views.test),  # 不携带参数
    path('data1/', views.data1),  # GET携带参数
    path('data2/p1/<p1>/p2/<p2>/', views.data2),  # pathinfo携带参数
    path('json1/p1/<p1>/p2/<p2>/', views.json1),  # pathinfo携带参数,返回json

]

2)F /blog/views.py:

from django.http import HttpResponse
import json


def index(requst):
    message = '空目录。Django服务已经启动。'

    return HttpResponse(message)


def test(request):
    print(request)

    return HttpResponse('route is success')


def data1(request):  # GET传参
    if 'p1' in request.GET or 'p2' in request.GET:
        message = '内容为: p1=' + str(request.GET.get('p1')) + '== p2=' + str(request.GET.get('p2'))
    else:
        message = '空get'
    return HttpResponse(message)


def data2(request, p1, p2):  # pathinfo传参
    message = 'p1=' + str(p1) + '== p2=' + str(p2)

    return HttpResponse(message)


def json1(request, p1, p2):
    message = {
        'p1': p1,
        'p2': p2,
    }
    return HttpResponse(json.dumps(message, ensure_ascii=False), content_type='application/json; charset=utf-8')

3)F/mysite/setting.py(经过实验,写不写无所谓。没实验过老版本。)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'blog',
]

--------

内容更新,创建多子项目时的路由写法:

-

a. 新建一个名为spider子项目:

$ python manage.py startapp spider

b. 新建spider/urls.py,并填入如下内容:

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('index/', views.index, name='index'),
]

c. 在spider/views.py里写入执行函数:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

在mysite/urls.py里面urlpatterns注册include路由,增加一个include:

from django.urls import include, path
# spider
path('spider/', include('spider.urls')),

d. 在mysite/settings的INSTALLED_APPS里面可以不填写 ‘spider’, 不影响路由。

-

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值