1 视图概念

视图是用来处理请求与响应,模型获取数据,模板渲染数据。

2 创建视图

  1. # 第一步:创建视图文件(views.py)并编写视图函数
  2. from django.http import HttpResponse
  3. def test(request):
  4. # 处理请求
  5. text = "<a href=\"https://www.baidu.com\">点我跳转</a>"
  6. # 处理响应
  7. return HttpResponse(text)

3.路由的使用

  1. 第一步:导入视图函数 from . import views
  2. 第二步:编写path方法 path('test/', views.test),
  3. 第三步:资源访问 http://127.0.0.1:8000/test/
  1. # 第一步:settings.py注册路由,在INSTALLED_APPS中加入创建的APP名称
  2. # 第二步:注册主路由 path('learning/', include('项目app.urls'))
  3. # 第三步:在APP下创建路由
  4. # 第四步:资源访问 http://127.0.0:8000/learning/test/
  1. # 编写视图函数
  2. from django.http import HttpResponse
  3. def learn(request, name):
  4. return HttpResponse(f"学习{name}课程")
  5. # 创建路由
  6. path('learn/<name>', views.learn),
  7. # 资源访问
  8. http://127.0.0.1:8000/learn/python
  1. # 创建路由
  2. path('learn/<str:name>', views.learn),
  3. # 资源访问
  4. http://127.0.0.1:8000/learn/python
  1. # 创建路由
  2. re_path('test/', views.test)
  3. re_path('^test/$', views.test)
  4. re_path('learn/(?P<name>[0-9]+)', views.learn),
  5. # 资源访问
  6. http://127.0.0.1:8000/1111test/
  7. http://127.0.0.1:8000/test/
  8. http://127.0.0.1:8000/learn/123455

需求:让不同的函数增加时间功能

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. import time
  4. def test1(request):
  5. flag = True
  6. if flag:
  7. nowtime = time.asctime(time.localtime(time.time()))
  8. return HttpResponse(f'test1{nowtime}')
  9. else:
  10. return HttpResponse(f'test1')
  11. def test2(request):
  12. flag = True
  13. if flag:
  14. nowtime = time.asctime(time.localtime(time.time()))
  15. return HttpResponse(f'test2{nowtime}')
  16. else:
  17. return HttpResponse(f'test2')

通过版本一可以发现,如果函数批量添加,需要重复进行同一个操作,代码冗余。

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. import time
  4. def test1(request, **kwargs):
  5. if kwargs.get('time'):
  6. nowtime = time.asctime(time.localtime(time.time()))
  7. return HttpResponse(f'当前时间:{nowtime}')
  8. else:
  9. return HttpResponse('无时间显示')
  10. def test2(request, **kwargs):
  11. if kwargs.get('time'):
  12. nowtime = time.asctime(time.localtime(time.time()))
  13. return HttpResponse(f'当前时间:{nowtime}')
  14. else:
  15. return HttpResponse('无时间显示')
  16. # 路由配置
  17. from django.urls import path
  18. from . import views
  19. urlpatterns = [
  20. path('test1/', views.test1, {'time': 'Ture'}),
  21. path('test2/', views.test2, {'time': 'Ture'}),
  22. ]

通过版本二,可以发现,我们可以通过**kwargs来获取判定结果,再以分路由来实现需要的功能,也可以通过主路由的配置来实现功能的实现,可以根据需求适当的变更。

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. import time
  4. def test1(request, **kwargs):
  5. message = '当前时间:'
  6. if kwargs.get('time'):
  7. message += time.asctime(time.localtime(time.time()))
  8. return HttpResponse(message)
  9. def test2(request, **kwargs):
  10. message = '当前时间:'
  11. if kwargs.get('time'):
  12. message += time.asctime(time.localtime(time.time()))
  13. return HttpResponse(message)