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

版权声明:== https://github.com/fyonecon == 人就像树,根越扎往黑暗,枝叶越繁茂 —— 鲁迅 == https://blog.csdn.net/weixin_41827162/article/details/84500537

注意: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',
]

-

猜你喜欢

转载自blog.csdn.net/weixin_41827162/article/details/84500537
今日推荐