(三) Django-GET处理和模版使用及URL name

Django

前言

当前环境: Ubuntu18 + Python3.6.5 + Django2.1.1

Django官网

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.

上一节, 我们修改了mysite项目的路由并使访问对应Url出现Hello World的字符.

这一节, 我们的目标是接收带参数的GET请求并处理.


Django-GET请求参数

Django-views.py

修改scetc应用中的views.py文件.

from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello World!")


def add(request):
    a = int(request.GET.get('a', 0))	# 获得GET请求中的'a'的值, 没取到就赋值为0.
    b = int(request.GET.get('b', 0))	# 同上.
    c = a + b
    return HttpResponse(str(c))

# Create your views here.

Django-urls.py

修改mysite项目中的urls.py文化.

"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from scetc import views

urlpatterns = [
    path('add/', views.add, name='add'),	# 修改这里即添加路由(映射).
    path('index/', views.index, name='index'),
    path('admin/', admin.site.urls),
]

运行Django Server并在Browser中访问http://IP:PORT/add/?a=1&b=12.

在这里插入图片描述


Django-模版使用

Django-views.py

修改views.py文件:

from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello World!")


def add(request):
    a = int(request.GET.get('a', 0))
    b = int(request.GET.get('b', 0))
    c = a + b
    return HttpResponse(str(c))


def page_one(request):
    return render(request, 'scetc/page_one.html')		# render用来渲染html.

# Create your views here.

修改完后, 我们还需要在scetc应用目录下创建./templates/scetc这样的目录并进入.

这里在templates目录下再创建相同的应用名目录是为了防止在一个项目中有多应用且有同名的html文件存在时, Django调用错误的html的文件.

这也是为什么我们会在views.py中的page_one函数传入scetc/page_one.html的参数, 这是为了告诉Django到scetc应用中的templates/scetc目录下查找文件.

./templates/scetc中创建page_one.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>page one</title>

    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <p>This is the page one!</p>
    <a href="/index/">helle world!</a>
</body>
</html>

Django-urls.py

修改urls.py文件, 修改部分如下:

urlpatterns = [
    ...
    path('page_one/', views.page_one, name='page_one'),
	...
]

然后我们还要修改settings.py文件(./mysite/settings.py), 修改部分如下:

INSTALLED_APPS = [
    ...
    'scetc',	# 将应用名添加进入.
    ...
]

这里的修改, 如果是用PyCharm来创建的Django项目, 会帮我们把应用名添加进去.

运行Server:

在这里插入图片描述


Django-URL name

什么是name?

  • path('page_one/', views.page_one, name='page_one'),: 这里的name是"page_one".

从上面的模版使用, 我们可以看出我们编写了一个page_one.html的文件, 然后修改view.pyurls.py文件并将应用名添加到了settings.py的对应位置中.

查看page_one.html文件的内容可以看出里面有label 'a'其中定义了href的link, 我们点击可以跳转到hello world页面下.

那么这里就有个问题, 我们知道label 'a'中的link是根据urls.py文件中路由规则来定的, 也就是说如果路由规则发生变化那么我们也得修改html文件中的内容, 不然无法获得正常的结果.

因为我们写的link是写死了的, 那么在后面网页或网站更新下会出现很糟糕的效果(改代码).

那么name的作用就出来了, 让我们改下html文件:

<a href="{% url 'index' %}">hello world!</a>

有些使用link是需要带参数或者是很长的, 如/test1/a/2等等.

那么对应的怎么使用呢:

  • {% url 'name' %}:没有带参数.
    • 如: "{% url 'index' %} => /index/
  • {% url 'name' 参数 %}: 带参数.
    • 如: "{% url 'add' 1 2 %} => /add/1/2/

修改完html文件后, 我们也可以修改hello world页面的路由规则, 但是我们之前就在urls.py写过name='index', 所以就直接运行Server.
在这里插入图片描述

可以看到, 网页已经渲染正常了, 这样写的好处是即便我们修改了urls.py的路由规则只要name不变, 那么就可以正常运行和被访问.


猜你喜欢

转载自blog.csdn.net/One_of_them/article/details/82830036