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