Day 05 - Django + MariaDB 在 Amazon Linux 2

33 篇文章 6 订阅
12 篇文章 0 订阅

Day 05 - Django + MariaDB 在 Amazon Linux 2

每天的目的是要让 Django Web 应用程序可以读取 MariaDB 的资料,在前一篇我们新增了一个专案为fishsite,这个专案下的fishsite子文件夹是整个网站的进入点,下图有文件夹目录的内容:

  • __init__.py: 是一个空文件,指示Python目录命名Python套件。
  • __pycache__文件夹:当.py档案第一次被汇入时,它会被直译器视为位元组程序码,将位元组码写入同名的.pyc档案中,简单的可以并且是专门加了专门的文件,可以请求直接读取这个部分代码的方案名称相同,特效执行速度。
  • settings.py:这是可以注册所有创建的应用的地方,也是网站文件,数据库配置的,等等。
  • urls.py:定义了网站url到视图的映射。虽然这里可以看到所有的url,但更多的一些做法是把应用相关的url包含在应用程序中,你可以在后台的相关教程里看到。
  • wsgi.py: 帮助 Django 应用和网络服务器间的通讯。你可以把这个当作模板。
  • manage.py:可以创建应用(App),资料库通讯,启动网络服务器等。

在这里插入图片描述
图 1、Django 专案的档案结构

Django 的一个专案下可以出现很多个应用(App),而当增加一个专案后会一个预设的应用,而这个预设的应用名称会跟专案名称相同。

  • 安装 Python 的 MariaDB 套件
  • 设置settings.py 以连接资料库
  • 设置 urls.py 定义网站 url 到画面 (view) 的对应
  • 新增view.py 读取资料库并回传结果

安装 P​​ython 的 MariaDB 套件

在 Amazon Linux 2 内安装 mariadb-devel,接着在通过 pip3 安装 Python 所需要的套件 mysqlclient

sudo yum install mariadb-devel
pip3 install mysqlclient

设置 settings.py 以连接资料库

在上一篇 Day 03 - 安装资料库 MariaDB 在 Amazon Linux 2 中已经设定好资料库,所以需要在 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 为 imgUpolad 对应到查看这个文件中你好你好设置的方法,在最后加入设置了下面的语法,结果如下图所示。

# 从当前目录中(.)汇入 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)

在这里插入图片描述
图 6、伺服器的回复情况

参考资料

  • __init__.py 作用詳解, https://codertw.com/程式語言/92993/
  • What is __init__.py for?, https://stackoverflow.com/questions/448271/what-is-init-py-for
  • Installing MySQL-python without mysql-server on CentOS, https://stackoverflow.com/questions/13922955/installing-mysql-python-without-mysql-server-on-centos
  • Databases, https://docs.djangoproject.com/en/3.2/ref/databases/
  • Performing raw SQL queries, https://docs.djangoproject.com/en/3.2/topics/db/sql/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值