Django网站开发流程概要

(基础概念,MVC模型的理解,可参考:http://www.runoob.com/django/django-model.html)

假设要开发的项目名为:tutorial, App名字为:blog

流程:

1.创建项目,添加app,配置语言,区划信息,数据库连接信息:

django-admin startproject tutorial
django-admin startapp blog

tutorial文件夹setting.py文件下:
INSTALLED_APPS中把"blog"添加进去
LANGUAGE_CODE='zh-hans'   默认为:en-us
TIME_ZONE='Asia/Shanghai' 默认为:UTC

2.创建超级用户,指定用户名,密码,能成功访问管理页面:

python manage.py createsuperuser

设置用户名,邮箱,密码 

Username: admin 
Email address: admin@example.com 
Password: ********** 
Password (again): ********* 
Superuser created successfully. 

参考自:https://docs.djangoproject.com/en/2.0/intro/tutorial02/#creating-an-admin-user

3.分别开发配置 Models.py Views.py Urls.py, 也就是配置MVC:

Models用于定义网页元素与数据库字段之间的对应关系(修改后要执行数据同步: python manage.py makemigrations, migrate);

Views用于定义请求处理函数,生成响应给前端。响应中包含要调用的页面模板;

Urls用于定义每一个网址要由Views里的那个函数来响应请求,其中:tutorial中的urls.py是最早的请求处理入口,可以直接指定处理函数,也用以把请求分派给其它app里的urls来处理。blog这个app中定义了自己这个模块对于url请求的响应规则。

4.模板,即:templates:

模板文件具体定义了每一个页面的排版布局。通过在views.py中指定响应给前端的是哪一个页面。

代码中,templates文件夹存放在tutorial/blog/下:

views.py中引用base.html的方法如下(包含传参):

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse
from blog.models import Article
from datetime import datetime
from django.http import Http404

# Create your views here.
def Test(request):
    return render(request,'blog/test.html',{'current_time': datetime.now()})

访问效果:

5.开发调试完成后,上线部署流程:

应用服务器可选:apache或者nginx。

要安装插件:sudo pip install uwsgi

( to be continue… )

附录:

软件安装:pip install django

如果有python多版本的问题,请参考anaconda的使用。

 

高效经典的排查命令

自己平常接触到的经典排查语句:

从user.log文件最新的300行中,查找"ERROR", 并打印后面30行

tail -fn 300 user.log |grep -A 30 "ERROR"

查找/tmp下30之前的文件并删除:

find /tmp -type f -ctime +30  -exec rm -rf {} \;

 查找文件内容

find . -name ‘.py’ |grep test  (只针对文件名搜索)
find . -name ‘
.py’ |xargs grep test (针对文件内容搜索)

xargs原理:将find的输入结果作为参数传递给grep命令,以达到搜索文件内容的功能

对文件内容进行排序并合并重复行

sort Example.txt | uniq > Target.txt

查询当前电脑的外网出口IP

curl ip.cn

查询是哪个进程占用硬盘io资源

yum install sysstat
iostat -x, 输入的 util 这一列表示1秒中硬盘I/O队列非空时间的百分比,数字越高表示越接近瓶颈
iotop 可用于定位具体的进程号

查询网络流量消耗

iftop 可查询网卡的实时流量

中间的这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
参考

查询端口被哪个进程占用

$ sudo netstat -tunlp |grep 80
[sudo] password for xxx:
tcp 0 0 0.0.0.0:80      0.0.0.0: LISTEN 6709/nginx: master
tcp 0 0 0.0.0.0:8081 0.0.0.0:
LISTEN 6709/nginx: master

# lsof -i :22 (需要root用户,普通用户查询出来结果为空)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1732 root 3u IPv4 30368 0t0 TCP *:ssh (LISTEN)
sshd 1732 root 4u IPv6 30404 0t0 TCP *:ssh (LISTEN)

查询特定进程占用多少内存

方法1: top -p 进程号, %MEM 这一列显示的就是进程占用内存的百分比, RES 这一列就是占用物理内存的值,单位为K
方法2: ps -aux |grep 进程号, 列值的含义同上
方法3: grep -i "VmRSS" /proc/进程号/status

打印占用内存前10的进程(排序):

ps aux | sort -k 6 -nr | head -n 10
这里sort的参数表示:按数值对第6列进行倒序排列

top如何按大小排序CPU使用率及内存使用率:

按P: 以 CPU 占用率大小的顺序排列进程列表
按M: 以 内存 占用率大小的顺序排列进程列表

字段含义:

VSZ 虚拟内存集,进程占用的虚拟内存空间
RSS 物理内存集,进程占用实际物理内存空间

把csv文件中, 中文括号括起来的内容删除掉

cat test.csv |sed ‘s/(.*)//’ >> group_TL_dep_map-new.csv
说明可参考:https://blog.csdn.net/ljp1919/article/details/53337670

Shell字符串截取:

var=http://www.yebaochen.com/123.html

1. 从左边第几个字符开始,及字符的个数

echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5表示字符的总个数
结果是:http:

2. 从右边第几个字符开始,及字符的个数

echo ${var:0-8:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123

3. 从右边第几个字符开始,一直到结束

echo ${var:0-8}
表示从右边第七个字符开始,一直到结束。
结果是:123.html

4. ${}的特殊用法:

假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt
${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt
${file##*.}:拿掉最后一个 . 及其左边的字符串:txt
${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:
# 是去掉左边(在鉴盘上 # 在 $ 之左边)
% 是去掉右边(在鉴盘上 % 在 $ 之右边)
单一符号是最小匹配﹔两个符号是最大匹配。
${file#/}(不加*号)表示只去掉最左边的/

实践: 设置本地git跟踪远程所有分支

git branch -r | grep -v ‘\->’ | while read remote; do git branch –track “${remote#origin/}” “$remote”; done
这里 ${remote#origin/} 的作用为拿掉 ${remote} 的 “origin/” 这个字符串

参考:
$ git branch -r |grep -v ‘\->’ 的值:
origin/home
origin/man
origin/master
origin/new
origin/nt
origin/yz

Linux系统信息查看:

cat /etc/system-release # 查看操作系统
cat /proc/cpuinfo # 查看cpu信息
uname -r # 查看内核版本
uname -a 或者 uname -m # 有 x86_64 就表示是64位的系统
arch # 查看指令集架构: x86_64 追求的是高性能, arm 追求的是低功耗

查看进程运行路径:

ps -ef 获取进程号
ls -l /proc/进程号/cwd 得到的就是可执行文件运行路径

lsof用法:

lsof aa.txt 显示开启文件 aa.txt 的进程
lsof -i :22 查看 22 端口现在运行什么程序
lsof -c docker 查看 docker 进程现在打开的文件
lsof -g gid 查看归属 gid 的进程情况
lsof +d /usr/local/ 查看目录下被进程开启的文件

Windows cmd 下查看监听对口对应的进程号:

netstat -ano |findstr 3306
(参数o用于展示进程号)

VI 删除行首或行尾空格

:%s/^\s+
:%s/\s+$

其中:\s 表示空格或tab,+ 匹配一个或多个
参考文档

linux 快速切换至命令行界面

init 0 (poweroff)
init 3 (直接切换至:多用户命令行模式,带网络功能)
init 5 (直接切换至:图形界面模式)
init 6 (重启至默认 runlevel)

windows powershell自带SHA1校验命令:

certutil.exe -hashfile filename sha1(或md5)

负载分析

:
运维架构师详解linux cpu负载
free命令输出解析

Windows如何重启进入BIOS:

有时会遇到主板开机时没有跳出欢迎界面直接进入系统,或者系统重启时无法进入BIOS。

这时可通过如下办法进入BIOS:鼠标点击重启按钮的时候,同时按住 shift 键。随后出现的菜单中,选择 utfi 相关的那项即可。

Centos 7 下重启 vsftpd 服务

systemctl restart vsftpd.service

SFTP创建非登陆账号需要配合修改 /etc/ssh/sshd_config

要点:
1.非登陆账号HOME目录属主为root
2./etc/ssh/sshd_config:
Subsystem sftp internal-sftp
Match User 账号名1,账号名2
ChrootDirectory /home/%u
ForceCommand internal-sftp
Match User version
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /home/version
ForceCommand internal-sftp

参考链接1
参考链接2

shell命令输出信息同步显示在屏幕中跟日志文件中

ls -l | tee -a file_name.log
参数a表示: append,没有加这个参数则直接覆盖整个日志文件

shell数组的用法array

Shell中的数组及其相关操作