web项目中,操作数据库通常会引入ORM,也经常遇到把数据库中查到数据转化成json格式的返回给前端,Django 中自带的ORM,自带函数可以把ORM的实例转化成python的dict 就可以转化成json了。

那如果是flask web 项目, 采用的flask-sqlalchemy ORM如何方便的把返回的实例转化成dict呢?

我的一点小经验:

# 假设model类是 ExamineStat
stat_data = ExamineStat.query.all()
keys = ExamineStat.__table__.columns.keys()
data = [stat_data.getattr(stat_data, key) for key in keys]

stat_data 是一个model实例,而data是一个list

import json 
json.dumps(data)  # 轻松转成json

这里主要利用了model的__table__.columns.keys()可以获取对应数据库中数据表的所有字段的key

django 自带web服务器程序,可用于开发调试,但不建议直接用到生产环境,那生产环境该如何部署django web项目呢?

本篇实际上为《Python web 开发 测试驱动方法》学习笔记,由书中内容改编(为适配当前最新环境)。

系统环境: ubuntu 16.4 或以上
项目源码: https://github.com/a523/TDD_django

安装依赖软件:

安装nginx

sudo apt-get install nginx
sudo systemctl start nginx

验证安装:访问服务器的 IP 地址 就能看到 Nginx 的“Welcome to nginx”。

ubuntu 18.04 自带python3, 如果没有请安装Python、Git、pip 和 virtualenv

sudo apt-get install git python3 python3-pip
sudo pip3 install virtualenv

如果在用apt-get安装的时候碰到如下错误:

start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused

请尝试执行:

sudo dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

- 阅读剩余部分 -

完整代码地址:https://github.com/a523/TDD_django

第一部分

怎么测试视图函数传入正确的值渲染模板?

from django.template.loader import render_to_string

render_to_string 函数可以渲染模板,然后拿它的返回值和视图函数的返回的HTML比较。

from django.http import HttpRequest

HttpRequest 可以构造request类
然后把这个request类做参数传给视图函数,如:

def test_home_page_can_save_a_POST_request(self):
    request = HttpRequest()
    request.method = "POST"
    request.POST['item_text'] = 'A new list item'

    response = home_page(request)
    self.assertIn('A new list item', response.content.decode())
    expected_html = render_to_string(
        'home.html',
        {'new_item_text': 'A new list item'}
    )
    self.assertEqual(response.content.decode(), expected_html)

- 阅读剩余部分 -

本文系从老博客平台迁移过来, 最初写于2018-07-08

BIND软件一般linux发行版都自带,如果没有安装,如下安装:

yum install bind -y

bind 配置路径在

[root@lyx156 ~]# ls /etc/named
named/               named.iscdlv.key     named.root.key
named.conf           named.rfc1912.zones

- 阅读剩余部分 -