Tagged: Python

Python Django Vue PostgreSQL搭建前后端分离项目

准备工作

安装环境

  • Pycharm
  • webpack
  • python 3
  • npm
  • vue-cli
  • postgresql
npm install -g webpack
npm install -g vue-cli

创建Django项目

django-admin startproject ServerList

创建成功后的目录如下

.
├── manage.py
└── pc_admin
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

进入项目根目录,创建一个APP作为项目后端

cd ServerList
python manage.py startapp backend //backend乃App名称

成功后目录如下

.
├── backend
│   ├── __init__.py
│   ├── admin.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── ServerList
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

创建前端项目

使用vue-cli在根目录创建一个frontend的Vue.js项目作为项目前端。

vue-init webpack frontend

配置数据源及前端模板

# 数据库设定
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'odam',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '127.0.0.1',
        'PORT': '5432'
    }
}
# 模版设定
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'DIRS': ['frontend/dist'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# Add for Vue.js
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "frontend/dist/static"),
]

结束

python manage.py runserver

Python 转数字为Excel列,转列为数字

def convent_column_to_char(column):
	"""
	将数字转换为Excel列
	1 => A, 2 => B, ......, 27 => AA
	:param column: int
	:return: str
	"""
	if not isinstance(column, int):
		return column
	tStr = str()
	while column != 0:
		res = column % 26
		if res == 0:
			res = 26
			column -= 26
		tStr = chr(ord('A') + res - 1) + tStr
		column = column // 26
	return tStr


def colname_to_num(colname):
	if not isinstance(colname, str):
		return colname
	col = 0
	power = 1

	for i in range(len(colname) - 1, -1, -1):
		ch = colname[i]
		col += (ord(ch) - ord('A') + 1) * power
		power *= 26
	return col


if __name__ == "__main__":
    l = list()
    n = list()
    for a in range(1, 1001):
        l.append(convent_column_to_char(a))
    print(l)
    for a in l:
        n.append(colname_to_num(a))
    print(n)

Odoo 使用 ir.sequence 生成序列号

在Odoo里面,默认提供了ir.sequence这样一个模块,他的作用就是一个序号生成器。在这次的项目中刚好用到了,这里就记录一下。

创建序号

打开 data/data.xml 写入如下代码:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
   <data noupdate="True">
      <record id="contract_number" model="ir.sequence">
         <field name="name">预算编号</field>
         <field name="code">budget.number</field>
         <field name="prefix">HT%(year)s%(month)s%(day)s</field>
         <field name="suffix">号</field>
         <field name="padding">1</field>
      </record>
   </data>
</odoo>

参数说明:

  • name - 名字,随便叫什么都行
  • code - 调用生成编码的 Key,需保证唯一性
  • prefix - 前缀,可以是固定的字面量也可以是组合参数
  • padding - 序列递增的位数

调用

将data/data.xml加入到__manifest__.py的data列表中。

budget_num = fields.Char(string=u'预算编号', copy=False, readonly=True, default=lambda x: _('New'))

@api.model
def create(self, vals):
	""" 保存方法重写 """
	if not vals.get('name', False) or vals['name'] == _('New'):
		vals['budget_num'] = self.env['ir.sequence'].next_by_code('budget.number')
	return super(Budget, self).create(vals)

Python 3 环境搭建

Python 3.6 安装

# 系统更新
yum -y update

# 安装yum补充程序和插件
yum -y install yum-utils epel-release

# Centos开发工具包
yum -y groupinstall development

# 安装IUS(Inline with Upstream Stable)
# https://ius.io/GettingStarted/
yum -y install https://centos7.iuscommunity.org/ius-release.rpm

# 安装Python3.6.3
yum search python3.6 # 搜索最新python
yum -y install python36u # 安装
python3.6 -V # 检查安装是否成功

#pip安装
yum search pip | grep python36u # 搜索支持的pip
yum -y install python36u-pip # 安装

# python开发库
yum -y install python36u-devel

Python 虚拟环境

mkdir environments
cd environments

# 创建环境
python3.6 -m venv odoo

# 激活环境
source ~/environments/odoo/bin/activate

# 退出环境
deactivate

注:在虚拟环境中,你可以使用命令python来代替python3.6,pip来替换pip3.6。如果在环境外的机器上使用Python 3,则需要专门使用python3.6和pip3.6命令。

Archives