• Django 初试水(三)


    在前面的一和二中,分别实现了一些基础的操作,数据库和 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>

    个人随手记录。

  • 相关阅读:
    The Mac Application Environment 不及格的程序员
    Xcode Plugin: Change Code In Running App Without Restart 不及格的程序员
    The property delegate of CALayer cause Crash. 不及格的程序员
    nil localizedTitle in SKProduct 不及格的程序员
    InApp Purchase 不及格的程序员
    Safari Web Content Guide 不及格的程序员
    在Mac OS X Lion 安装 XCode 3.2 不及格的程序员
    illustrate ARC with graphs 不及格的程序员
    Viewing iPhoneOptimized PNGs 不及格的程序员
    What is the dSYM? 不及格的程序员
  • 原文地址:https://www.cnblogs.com/why-home/p/12373305.html
Copyright © 2020-2023  润新知