django xadmin模块使用笔记

在app下新建adminx.py文件

class EmailVerifyRecordAdmin(object):
    """
    list_display: 后台列出的字段
    search_fields: 搜索框及支持搜索的字段
    list_filter: 添加过滤器
    """
    list_display = ['code', 'email', 'send_type', 'send_time']
    search_fields = ['code', 'email', 'send_type']
    list_filter = ['code', 'email', 'send_type', 'send_time']

EmailVerifyRecord为models.py中定义的数据表model
然后通过以下方式将管理器与model进行注册关联

xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)

其他的一些自定义配置:

class BaseSetting(object):
    # 主题功能开启
    enable_themes = True
    use_bootswatch = True
class GlobalSettings(object):
    site_title = "后台管理"
    site_footer = "tianyuan233"


# 将Xadmin全局管理器与我们的view绑定注册。
xadmin.site.register(views.BaseAdminView, BaseSetting)
# 将头部与脚部信息进行注册:
xadmin.site.register(views.CommAdminView, GlobalSettings)

docker镜像管理命令学习

查看当前镜像

[root@ztydl ~]# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos-wget                             latest              9e694366ecc0        29 minutes ago      312.9 MB
centos                                  latest              1c1b67b33c28        3 weeks ago         196.6 MB
daocloud.io/centos                      7                   1c1b67b33c28        3 weeks ago         196.6 MB
zty                                     latest              32e90b4dd628        3 weeks ago         108.3 MB
daocloud.io/daocloud/daocloud-toolset   latest              2a2ecdfa41dc        6 months ago        147.1 MB

根据镜像ID删除镜像(-f force 强行删除)

[root@ztydl ~]# docker rmi 32e90b4dd628
Error response from daemon: Conflict, cannot delete image 32e90b4dd628 because it is tagged in multiple repositories, use -f to force
Error: failed to remove images: [32e90b4dd628]

继续阅读

linux下LVM扩容操作记录

pvdisplay命令用于显示物理卷的属性

[root@test ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vg_test
  PV Size               9.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2434
  Free PE               0
  Allocated PE          2434
  PV UUID               uuFpno-W0L9-8TLY-FAIT-ZzIl-2rh4-SUvk2z

  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_test
  PV Size               10.00 GiB / not usable 4.70 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2558
  Free PE               128
  Allocated PE          2430
  PV UUID               VNL3Ui-v9KS-0HJY-3Zsb-R6Dy-Hgpt-gpuFnM

lvdisplay显示逻辑卷相关属性


<!--more--> [root@test ~]# lvdisplay --- Logical volume --- LV Path /dev/vg_test/lv_root LV Name lv_root VG Name vg_test LV UUID w5FAwQ-dSX8-77fJ-3Ayl-SWK5-mMb5-wrZM33 LV Write Access read/write LV Creation host, time test.com, 2017-10-16 22:49:07 +0800 LV Status available # open 1 LV Size 18.00 GiB Current LE 4608 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/vg_test/lv_swap LV Name lv_swap VG Name vg_test LV UUID JbqQAI-od42-PK80-PZAF-ovbI-Z9vH-XZR5Co LV Write Access read/write LV Creation host, time test.com, 2017-10-16 22:49:09 +0800 LV Status available # open 1 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1

/dev/sdb是新添加的一块硬盘
先用fdisk命令新建一个分区

[root@test ~]# fdisk /dev/sdb 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xf5002802.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652): 
Using default value 652

Command (m for help): t             #修改分区格式
Selected partition 1
Hex code (type L to list codes): L      #查看分区格式列表

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e                 #类型修改为8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf5002802

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         652     5237158+  8e  Linux LVM

Command (m for help): w     #保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

正式扩容操作

mkfs -t ext4 /dev/sdb1
pvcreate /dev/sdb1
vgdisplay 
vgextend vg_test /dev/sdb1              #先扩展VG
lvdisplay 
lvextend -L 9G /dev/vg_test/lv_root     #扩展LV 9G为总大小 如果是增加4G 可写为 +4G
resize2fs /dev/vg_test/lv_root 
df -h
vgdisplay 
lvdisplay 
resize2fs /dev/vg_test/lv_root          #resizes 
df -h

python处理UTF-8文件的BOM头

问题

用requests库下载一个xml文件,结果 return response.content 的时候发现返回的文本是这样的

b'\xef\xbb\xbf<?xxxxxxxxxx

前面有b’\xef\xbb\xbf
写入文件的时候就有问题了
查了一下EF BB BF是被称为 Byte order mark (BOM)的文件标记,用来指出这个文件是UTF-8编码
在Stack Overflow上面搜到一个类似的问题
https://stackoverflow.com/questions/13590749/reading-unicode-file-data-with-bom-chars-in-python

解决方案

>>> b'\xef\xbb\xbfhello'.decode('utf-8-sig')
'hello'

LeetCode 7 反转整数

题目

给定一个 32 位有符号整数,将整数中的数字进行反转。

代码

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x >= 0:
            y = int(str(x)[::-1])
        elif x < 0:
            y =  -int(str(-x)[::-1])
        return y if y < 2147483648 and y > -2147483648 else 0

思路

LeetCode 9 回文数

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

代码

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x < 0:
            return False
        else:
            y = str(x)[::-1]

        if str(x) == y:
            return True
        else:
            return False

思路

将数字转换为字符串然后切片 生成新的字符串
先判断 if x < 0 返回 false 可以提高效率

LeetCode 1 两数之和

题目

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

代码

def twoSum(nums, target):
    """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
    #         for i in range(len(nums)-1):
    #             for j in range(i+1,len(nums)):
    #                 if nums[i] + nums[j] == target:
    #                     return [i,j]
    dic = {}
    for i, num in enumerate(nums):
        print(nums)
        if num in dic:
            print('----')
            print([dic[num], i])
            print('----')
        else:
            dic[target - num] = i
            print(dic)

twoSum([1,3,5], 8)

原理解析:

将目标值t与当前遍历的元素num做差,将差值和num的索引值i存入字典dic,
当取到下一个num值时,先检查num 有没有在dic中,
如果存在,说明已经找到了两个num 满足相加等于t的条件(a+b=c => a=c-b)
然后返回当前num的索引值和之前存入字典的索引值

vscode使用pipenv虚拟环境的解释器

查看当前pipenv环境的python解释器的绝对路径:

$ pipenv --py
C:UsersAdministrator.virtualenvshttpbin-HCxJgMvtScriptspython.exe

打开设置 在工作区设置中添加如下配置:

{
"python.pythonPath": "C:/Users/Administrator/.virtualenvs/httpbin-HCxJgMvt/Scripts/python.exe",
"python.linting.pylintEnabled": false
}

python.pythonPath 填写 第一步执行命令输出的路径
然后就可以在vscode中右键 选择 在终端中执行python文件啦