Django
前言
当前环境: Ubuntu18 + Python3.6.5 + Django2.1.1
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.py
和urls.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
不变, 那么就可以正常运行和被访问.