在前面的一和二中,分别实现了一些基础的操作,数据库和 Django 自带的管理界面,接下来,主要是创建我们自己的界面(视图)。

访问一个地址,对应的服务器直接返回一个视图。这是最常见的交互。

就好比访问 http://localhost:8000 会返回系统首页。

创建视图:polls/views.py

 1 def index(request):
 2     return HttpResponse("Hello, world. You're at the polls index.")
 3 
 4 def detail(request,question_id):
 5     #return HttpResponse("You're looking at the result of question %s ." % question_id)
 6     try:
 7         question = Question.objects.get(pk=question_id)
 8     except Question.DoesNotExist:
 9         raise Http404(" Question does not exist !")
10     return render(request,'polls/detail.html',{'question':question})
11 def results(request, question_id):
12     response = "You're looking at the results of question %s."
13     return HttpResponse(response % question_id)
14 
15 def vote(request, question_id):
16     return HttpResponse("You're voting on question %s." % question_id)

修改路由信息:polls/urls.py

1   
    # 默认进来首页
    path('', views.index, name='index'), 2 # ex: /polls/5 3 path('<int:question_id>/',views.detail,name='detail'), 4 # ex: /polls/5/results/ 5 path('<int:question_id>/results/', views.results, name='results'), 6 # ex: /polls/5/vote/ 7 path('<int:question_id>/vote/', views.vote, name='vote'),

打开服务器:

1 py manage.py runserver

访问路径:  http://127.0.0.1:8000/polls/1/   进入  detail 视图。

在访问路径的时候,服务器视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常(比如 404 等)。

在上面的例子中,为什么模型 API 不直接抛出 ObjectDoesNotExist 而是抛出 Http404 呢?

因为这样做会增加模型层和视图层的耦合性。指导 Django 设计的最重要的思想之一就是要保证松散耦合。一些受控的耦合将会被包含在 django.shortcuts 模块中。

也有 get_list_or_404() 函数,工作原理和 get_object_or_404() 一样,除了 get() 函数被换成了 filter() 函数。如果列表为空的话会抛出 Http404 异常。

这些内容自行去尝试。

在配置了多项目之后,直接访问:http://localhost:8000   发现抱错如下:

需要在mysite.urls.py ,加上:path('', include('polls.urls')),   访问跟项目的时候,默认指定进入  polls/urls.py   找路径。

urlpatterns = [
        path('', include('polls.urls')),
    path('expolls/', include('expolls.urls')),
    path('polls/', include('polls.urls')),
        path('admin/', admin.site.urls),
]

也有多个应用是崇明,可以为 URL 添加命名空间。修改对应项目的 urls.py  文件。添加 属性 app_name=''

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

修改为指向具有命名空间的详细视图:polls/templates/polls/index.html

<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

 

个人随手记录。

 

posted on 2020-02-27 17:42  FUN+咖啡  阅读(108)  评论(0编辑  收藏  举报