今天的目的是要让 Django Web 应用程序可以读取 MariaDB 的资料,在前一篇我们新增了一个专案为 fishsite,这个专案下的 fishsite 子文件夹是整个网站的进入点,下图有文件夹目录的内容:
图 1、Django 专案的档案结构
Django 的一个专案下可以存在很多个应用(App),而当新增一个专案後会建立一个预设的应用,而这个预设的应用名称会跟专案名称相同。接下来的工作是
安装 Python 的 MariaDB 套件
在 Amazon Linux 2 内安装 mariadb-devel,接着在透过 pip3 安装 Python 所需要的套件 mysqlclient
sudo yum install mariadb-devel
pip3 install mysqlclient
设定 settings.py 以连接资料库
在上一篇 安装资料库 MariaDB 在 Amazon Linux 2-Day 03 中已经设定好资料库,所以需要在 settings.py 中建立资料库的连线设定
'default': {
'ENGINE': 'django.db.backends.mysql', # 资料库引擎
'NAME': 'fishdb', # 先前建立的资料库
'USER': 'fishuser', # 资料库使用者
'PASSWORD': 'xxxxxx', # 密码,左边的密码是去敏用的,请自行设定
'HOST': 'localhost', # 资料库所在主机
'PORT': '3306', # 资料库埠号
'OPTIONS': {
'sql_mode' : 'STRICT_TRANS_TABLES', #当数据在插入时被截断时,该选项会将警告升级为错误。
}
图 2、在 settings.py 中资料库连线设定
完成资料库设定後,可以再运行一下启动 Django Web 服务器的指令,以确保设定的参数是正确的,以及跟有的套件都已经完备,下图就是将资料库的使用者名称设定为 fishuser1 ,而导致存取拒绝的错误讯息。可以按下 CTRL+C 中断执行 Django Web 服务器的指令後,再进行修改。
python3 manage.py runserver 0.0.0.0:8000
图 3、因资料库设定错误,导致启动 Django Web 服务器失败
设定 urls.py
接着打开 urls.py 来设定 URI 到画面 (view)的对应,我们的专案很简单,只有一个上传图片的需求,所以设定 URI 为 imgUpolad 对应到 view 这个文件中 hello 的方法,在最後一行加上下述语法,结果如下图所示。
# 从目前目录中(.)汇入 view.py 这个档案
from . import view
# 指定当使用者读取 imgUpolad 这个URI时会对应 (route) 到 view 这个档案中的 hello 这个方法
path('imgUpload/', view.hello),
图 4、新增 URI 与画面的对应关系
新增 view.py
在 urls.py 这个档案相同的目录下,新增一个档案 view.py,内容如下,主要功能为读取资料库内容并回传结果。我们所采用的方法是直接用原始 SQL 语法读取资料表,而非用 Django 使用物件关系映射器(ORM),将 Django 代码中的模型 (model) 定义,会对应到底层的资料库使用的资料结构。主要是因为我们只有一个的资料表,所以直接用 Django 所实作的 connection 来传入所需的 SQL 语法。
型态简单
view.py
from django.http import JsonResponse
from django.db import transaction
from django.db import connection
def hello(request):
with connection.cursor() as cursor:
cursor.execute("select fishName,LatinName from fishInfoTbl")
#row = cursor.fetchone()
row = dictfetchall(cursor)
return JsonResponse(row, safe=False)
def dictfetchall(cursor):
# "Return all rows from a cursor as a dict"
columns = [col[0] for col in cursor.description]
return [
dict(zip(columns, row))
for row in cursor.fetchall()
]
在浏览器里输入 http:[EC2_IPv4]:8000/imgUpload/,[EC2_IPv4]指的是EC2的公有 IPv4 地址。就会出现 5 笔资料表中的资料,可以发现会是以编码的方式呈现,如下图所示。
图 5、透过浏览器呼叫 Django 的方法
下图是後端服务器的回应状况,可以看到前端呼叫 imgUpload 的 HTTP 请求(request),以及成功的 200 代码回应 (response)
参考资料
再来要介绍连结HTML文件和CSS样式表的不同写法 在< head>元素里面使用<...
https://leetcode.com/problems/arithmetic-slices/d...
EditText为提供使用者输入之元件, 而其中包括许多属性提供不同之用途, 下面列举出EditTe...
每支API都要写文件的日子, 你还记得吗? API文件是让别人了解系统提供哪些功能的媒介, 文件要写...
剩下几天的时间,要再分享其它实作内容似乎有些困难,那麽大家轻松一点,今天就来谈谈我们所学这些技术的应...