Django框架的使用-基于Python
本文档介绍web框架中Django框架,基于Python。
1 基本概念
1.1 URL格式
Uniform Resource Locator,统一资源定位器,
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
也可认为由4部分组成:协议、主机、端口、路径
URL的一般语法格式为:
(带方括号[]的为可选项):
protocol : // hostname[:port] / path / [;parameters][?query]#fragment
- protocol:协议,如http等。
- hostname:主机名、IP地址
- port:端口号
- path:路径
- parameters:参数,以?开始到#结束的区域传递参数
- query:查询
- fragment:信息片断
1.2 QueryDict 对象
这是是Django中的字典对象,与Python传统的字典对象不同的是:Python中的字典一个键只能对应一个值,而QueryDict允许一个键对应多个值。
- QueryDict.get(key) 获取的是所有值的最后一个,只有一个值时获取当前值
- QueryDict.getlist(key) 获取这个键对应的所有值, 存放在列表中返回
2 工程基本配置
2.1 工程创建
2.1.1 创建
创建工程前应cd至想保持工程的木下
django-admin startproject 工程名称
创建目录如下:
2.1.2 工程各目录文件作用
2.1.2.1 配置文件——settings.py
- BASE_DIR:指向当前工程的根目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
___file___ : 当前的文件
os.path.abspath ( 文件 ) : 获取这个文件的绝对路径
os.path.dirname( 路径 ) : 获取这个路径的上一级路径,两次即返回根目录
- DEBUG:设置是否为调试模式,默认为True,在True情况下报错会显示具体错误信息。实际对外运行需要设置成False,同时要设置参数ALLOWED_HOSTS,设置允许访问的IP,*为所有。
- LANGUAGE_CODE:语言,‘zh-hans’ 中文
- TIME_ZONE:时区,‘Asia/Shanghai’ # 亚洲上海时区
2.2 运行
切换至创建的过程目录里
python manage.py runserver # 默认127.0.0.1:8000也可以选择在后面选择IP地址和端口
默认条件
运行效果在浏览器输入 127.0.0.1:8000
2.3 子应用
2.3.1 创建
cd至工程文件的根目录下
python manage.py startapp 子应用名称
创建的子应用目录
2.3.2 子应用目录各文件作用
- admin.py :文件跟网站的后台管理站点配置相关。
- apps.py :文件用于配置当前子应用的相关信息。
- migrations :目录用于存放数据库迁移历史文件。
- models.py :文件用户保存数据库模型类。
- tests.py :文件用于开发测试用例,编写单元测试。
- views.py :文件用于编写Web应用视图。
2.3.3 添加子应用于工程
在工程文件里的settings.py文件里的INSTALLED_APPS添加类似“子应用名称.apps.NameConfig”(例’demo_1.apps.Demo1Config’,具体名字根据子应用的名字确定,可以在子应用的apps.py文件查看),如下
2.4 视图创建
2.4.1 视图编写
打开子应用目录下的views.py编写视图程序
def index(request):
return HttpResponse("Hello World!") # 在页面输出Hello World!
2.4.2 定义路由URL
1.在子应用根目录下创建文件urls.py称子路由
from django.conf.urls import re_path
from . import views # 导入自己编写的视图文件
# urlpatterns 是被 django 自动识别的路由列表变量
urlpatterns = [
# 每个路由信息都需要使用 url 函数来构造
# url (路径, 视图)
re_path(r'^$', views.index),
]
re_path():包含四个参数
- regex:正则表达式,其中的(?P<name>regex)会被传入view函数中与name相同的参数中,填写的为访问地址。例如上面的写法访问地址为:http://127.0.0.1:8000/demo_1,如果是’^index/$'则地址为:http://127.0.0.1:8000/demo_1/index
- 创建路由地址:re_path(/r’^inininin /$’, views.index),创建’子应用名字/inininin/’,以此格式书写 r’^inininin/$’ 可以防止访问路由时发生屏蔽。
- 获取路由地址:reverse( ‘子应用名称 : 某路由名称’ )(from django.urls import reverse),返回路由地址为: ‘/子应用名称/某路由名称’
- view:视图函数
- kwargs:字典类型,其中的键值对会按照随机顺序传入view函数中
- name:对本条URL进行别名,这样就可以在其他地方被引用。
2.在工程根目录下打开urls.py,修改urlpatterns参数
from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
urlpatterns = [
path('admin/', admin.site.urls),
url('demo_1/', include('demo_1.urls')),
]
3.运行manage.py(python manage.py runserver)
输入网址查看http://127.0.0.1:8000/demo_1/
3 参数传递
3.1 前端向后传递
3.1.1 URL查询字符传参
查询字符是在url中的parameters,是url地址中以’?‘开始以’#'结束的字符段。
可以在views.py文件编写视窗函数通过 request.GET 获取,返回为QueryDict 。
# url: http://127.0.0.1:8000/demo_1/get_url/?a=1&b=2&a=3#/
def get_url(request):
# 获取查询字符串参数
a = request.GET.get('a')
b = request.GET.get('b')
alist = request.GET.getlist('a')
# 打印
print(a) # 3
print(b) # 2
print(alist) # ['1', '3']
return HttpResponse('OK')
可以使用接口调试软件Postman进行参数传递:
软件会自动帮助输入调整网址
3.1.2 URL路径传参
在基础的视图设置中,我们的路径使用的是完整的路径名,要求完全匹配才能进行访问,而正则化是允许模糊匹配的,因此我们可以利用路径进行传参。
# url:127.0.0.1:8000/demo_1/get_path/adad/2020/
# views.py
def get_path(request, name, year):
'''定义weather函数, 接收路径参数'''
print(