自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 python初识celery

Celery 是一个简单、灵活且可靠的分布式系统,用于 处理大量消息,同时为操作提供 维护此类系统所需的工具。这是一个专注于实时处理的任务队列,同时也 支持任务调度。官网地址:https://docs.celeryq.dev/en/stable/

2023-11-23 13:43:39 128

原创 Odoo开发中的权限管理

本文开始前我们首先要知道的是,我们安装好odoo并配置好数据库之后,即便不加载任意一个模块,odoo也会在数据库中默认创建一些数据表。这些表就是用来存放模块的数据模型名、字段名、页面组件、权限配置等信息的,我们创建的每一个数据模型、模型的每一个字段、每一个模型的表单等等都是在odoo框架中都是以一条条数据记录的方式存储在数据库中的。

2023-08-11 08:50:55 663

原创 Odoo视图的基本组件

本文讲述的是一个数据模型创建完成之后,展示给用户的东西。所以本文提到的视图的基本组件就是做数据记录展示的表格、数据记录新增修改时的表单以及搭配数据表格使用的搜索框。

2023-07-27 10:16:57 230

原创 windows系统源码安装Odoo16

本文使用win10系统源码安装odoo16,Linux系统源码安装大致相同。

2023-07-10 11:59:27 1835

原创 Django项目实现微博登录

前段时间我的老板让我写一个小功能,说现在的用户进入一个新的网站时,很多时候是不想去注册的,最好可以用一些他们本身就用的其他应用的账户来授权登录。本文就是从这个现象来说一说用户使用第三方账号登录我们的网站,主要说的是这里面的原理和过程,无所谓开发语言或者框架也无所谓是哪个第三方应用,只不过其中的样例代码用到的是django框架和微博。

2023-06-29 14:40:55 146

原创 django自定义用户模型

当你发现上述简单的使用django内置的User模型字段已经不能满足你的业务需求,想要自定义一个用户模型来替换内置的User模型,让django内置的其他相关功能都从衔接原有的User模型改成衔接你自定义的模型时,就是现在网上能找到的绝大多数文章讲述的内容。继承并重写用户模型在settings.py文件中指定自定你自己的模型,表示用你自己的模型覆盖django内置的用户模型……model."""这些东西都可以通过Ctrl键加鼠标左击查看源码的方式看到,所以我简单复制了一下就没有过多的展示。

2023-05-10 17:00:50 798 1

原创 Django模型方面报错

django.db.utils.ProgrammingError: (1146, "Table 'xxx.xxx' doesn't exist") 此报错的特殊情况:项目首次发布创建数据表时一直报错表不存在

2022-11-03 11:25:56 704

原创 Django内置admin管理页中自定义数据表格列

amdin管理页中的数据表格修改方式我这里想到了两种,在这里分享给大家。通常我们在注册模型的时候,会创建一个模型管理类,通过这个类的属性list_display来设置需要展示的字段。所以想要数据表格展示哪些列就在这个list_display变量中添加对应的数据字段名即可。下面交大家两种创建模型中没有的列并展示的方法。

2022-11-01 16:45:36 1258

原创 Django根据已有数据库表生成模型

django根据已有的数据库表创建模型;django模型回滚

2022-08-26 15:16:32 2008

原创 ECharts设置x轴刻度间隔的两种方法

图表x轴的刻度文字全部挤到一起

2022-07-07 13:34:36 20073

原创 Python对象的初始化与清理

Python对象的初始化与清理python中所有的类都是直接或间接继承自Object类的,Object类中有一些自带的方法也会被我们自定义的类继承到。当我们去实例化一个对象时,总是免不了要先对对象中的成员属性初始化;同样的,当一个对象使用完后,也需要销毁该对象,释放其占用的内存空间(这个过程被称为垃圾回收)。因为python有自动的垃圾回收机制,可以自动将不需要使用的实例对象进行销毁。一般不需要开发者手动进行。正如C++语言中的构造函数和析构函数一样,Python语言中同样有类似的初始化方法和清理方法

2022-04-24 22:46:57 2331

原创 Python可迭代类

Python可迭代类__iter__()和__next__()python中我们常常会用到for循环结构(for 元素 in 元素来源: …)for循环后面的元素来源实际上就是一个可以迭代的对象。for … in …语句其实做了两件事,第一件事是获取一个可迭代对象,即调用了__iter__()函数;第二件事就是循环过程,也就是在循环地调用__next__()函数。也就是说,我们可以通过__iter__()和__next__()来自定义一个可以迭代的类:# 定义一个斐波那契类Class Fib:

2022-04-24 22:45:27 1174

原创 Qt事件分发及过滤

Qt事件分发及过滤当我们的程序发现一个事件的时候,并不是立即调用事件函数,而是全部交由分发器event()处理。event()返回的数据类型是bool类型,如果event()返回的结果是true表示用户要自己处理事件,event()就不会向下分发。所以我们可以利用event()做事件的拦截(不建议)事件拦截例:在myLbel部件中拦截鼠标点击事件// 鼠标按下void myLabel::mousePressEvent(QMouseEvent *ev){ if (ev->button

2022-03-07 11:36:09 347

原创 Qt自定义控件封装

自定义控件封装样例效果:描述:部件QSpinBox和QSlider组合,改变其中一个的值,另一个随之改变添加按钮快速获取或设置组合的值部件组合新建项目,添加新建项Qt——>Qt设计师界面类——>选择界面模板(widget)——>命名类名,完成2. 进入新添加模板的ui设计界面,向其中添加部件并布局进入主窗口ui设计界面,添加widget部件点击右键——>提升为——>输入提升的类名称——>提升利用信号和槽联系组合内的部件在组合类的源文件

2022-03-06 21:43:56 1006

原创 Qt信号和槽函数之间的参数传递

Qt信号和槽函数之间的参数传递信号和槽内部的参数是如何传递的Qt的信号槽机制中,信号是只声明不实现,同时可以发生重载。通常我们使用函数指针来指向具体重载版本,那么信号的这些参数去哪里了呢?信号函数发出信号后,会将自己接收到的所有参数按照接收到类型、顺序、全部传递给槽函数,所以我们在定义槽函数的时候是可以去接收信号函数传过来的参数的——槽函数的参数数量可以小于等于信号函数参数,但是剩下的参数应该跟信号函数的参数在类型和顺序上相对应。例如:// 在信号发出者类中定义一个有参的信号函数void Tea

2022-02-14 09:40:38 9072 1

原创 Qt信号和槽机制

Qt信号和槽机制什么是信号和槽当某个事件发生,就执行一个操作发生的事情就是信号,执行的操作就是槽(函数)给二者加上主体:信号发出者发出信号,信号接收者执行操作将二者联系起来(松耦合):connect()函数connect(sender,signal,receiver,slot);/*参数解释:sender:发出信号的对象signal:发送对象发出的信号receiver:接收信号的对象slot:接收对象在接收到信号之后所需要调用的函数(槽函数)*/信号函数查询:Qt帮助文

2022-02-14 09:40:04 113

原创 C++ Lambda表达式

Lambda表达式C++11 中Lambda表达式用于定义和创建匿名函数语法:[] () {};[函数参数] (形参列表) mutable -> 返回值类型 {函数体};[]标识符,告诉编译器此处是匿名函数,也用于捕获表达式以外的变量。即中括号内的变量是来自于lambda函数作用域之外中括号内为空,不使用外部变量[=],外部变量以值传递的方式传给函数内部[&],外部变量以引用传递的方式传给函数内部()参数,lambda表达式函数体的形参就放在这里。{} 函数实现体

2022-02-11 13:16:28 466

原创 C++随机数

C++随机数C++提供了两个函数,用于返回随机数:rand() 和 srand()rand()功能: 随机数发生器用法:// #include<stdlib.h>int rand(void)rand()的内部实现是用线性同余法做的,简单的讲就是通过类似于一个数学周期函数去生成一个数字。而这个周期又特别的长,所以在一定范围内可以看成是随机的。故单独使用rand()生成的随机数实际上是伪随机数。当用户未设定随机数种子时,系统会默认随机数种子为1。随机数种子可以简单地理解成上面提到的

2022-02-02 19:17:39 23689 2

原创 C++内存分区模型

C++内存分区模型C++程序在执行时,将内存大致划分成4个区域:代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值 局部变量等堆区:由程序员分配和释放,若程序员不是放,程序结束时由操作系统回收内存四区的意义:不同区域存放的数据,赋予不同的生命周期,使我们灵活编程程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域:代码区:​ 存放CPU执行的机器指令​ 代码区是共享的,共

2022-02-02 19:11:30 91

原创 用递归的方式实现开平方(C++)

用递归的方式实现开平方(C++)以前写过一篇用python代码去实现开平方根的文章,最近在学习C++,在这里再把同样的原理用C++代码实现一下。开平方的原理不再重复,有兴趣的朋友可以翻一翻我以前的文章。#include<iostream>using namespace std;// 用二分法找到完全平方数int get_a (int num) { int left = 0, right = num; // C++中同为整型的数值进行算术运算,其结果只保留整数部分

2021-11-05 16:21:08 1397

原创 笔记整理:Django ORM基本数据操作

Django ORM基本数据操作ORM是干啥用的Django有一个显著的特点就是应用ORM理念处理数据,这使Django与其他开发语言或者框架明显区别开。ORM的意思是对象关系映射,Django ORM描述Django数据模型类与数据库之间的映射关系,通俗地讲就是一个类和一个数据库表进行对应,这使ORM在数据库层和业务逻辑层之间起到了桥梁的作用。我的上一篇笔记创建数据模型里讲到,在Django的模型文件models.py每写一个类,数据库就会对应的生成一个数据库表。也就是说,我们根本不需要去写SQL语

2021-10-07 14:53:57 611

原创 笔记整理:Django创建数据模型

Django创建数据模型Django中的模型是用来定义数据结构的类,并提供数据库表管理机制,主要用来定义字段的名称、类型、字段最大值、默认值、约束条件等。简单的说就是,当你在Django的模型中创建一个类时,Django所连接的数据库就会创建一个表,表的字段就是你所创建的类的属性,字段的约束条件等信息就是创建类属性时所设置的参数。连接数据库Django可以成为面向数据的开发框架,用命令生成项目与应用程序后,项目根目录下会生成一个默认的数据库db.sqlite3。如果我们向要使用其他的数据库,就需要在s

2021-09-14 15:10:33 649

原创 笔记整理:Django基本开发流程

Django基本开发流程Django的主要文件​ Django按照MTV设计模式以松耦合的方式把不同功能分配到各个文件,这些文件各司其职,通过代码或配置的方式完成独立功能,并与其他文件协作:urls.py 是进行URL配置的文件,是网址入口,建立URL表达式与视图函数的对应关系,也就是建立访问网址就调用对应函数的机制views.py 是视图函数存放模块,处理用户发过来的请求。用户请求从url.py中的配置项映射过来,逻辑代码分析用户请求后,从数据库中提取数据,向templates文件夹中的模板文件

2021-09-11 23:46:03 1572

原创 笔记整理:Django的MTV模式

Django的MTV模式什么是MTV模式​ 首先我们要知道,python Web框架一般实现3个核心功能:收发消息(socket功能);根据用户不同的路径执行不同的函数;从HTML文件中取出内容,并且完成字符串的替换。而Django则是包含第而三种功能,第一种由第三方库来实现。这就意味着,利用Django框架开发Web应用主要是围绕着第二三种功能编写代码。​ MTV是Web开发的一种设计模式,简单的说就是把上述的第二三种代码细分成三个板块再以松耦合的方式连接在一起。这三个板块分别是M(model:

2021-09-11 23:42:59 933

原创 笔记整理:用socket实现Web开发框架流程

笔记整理:用socket实现Web开发框架流程基础概念socket: socket是一种通信机制,通过绑定IP地址和端口产生一个通信链,实现计算机之间的通信。网络中不同的计算机之间进行通信必须经过IP地址和端口,为了降低网络通信开发的复杂度,人们在TCP/IP4层结构中的应用层与传输层之间加了一层,这个层就是socket层。它把复杂的TCP/IP进行了封装,并提供了一组服务的接口。**Web服务:**Web服务本质上是由socket服务端向socket客户端提供HTTP响应,而浏览器就是一个socke

2021-08-30 22:44:44 624

原创 python自定义异常

python自定义异常raise​ python的异常有两种,一种是python自带的异常,当我们写的代码在语法或其他功能的调用上有误时,如果没有异常捕捉的话代码运行会直接报错的,都算这一类。另一种就是当我们觉得,仅仅只是针对语法方面的报错已经不能满足我们的要求了,我们希望在某些逻辑的环节上,虽然语法没有错,但也要主动报错,以避免按照错误的逻辑继续执行,后面这一种就属于自定义异常,为的就是在我们需要的时候抛出一个异常。​ 凡是自定义异常就绕不开一个关键词——raise,其作用就是主动抛出异常。ra

2021-08-16 17:10:00 5673

原创 python装饰器设置参数

python装饰器设置参数前言​ 一开始没打算写这篇文章的,今天整理笔记看到了偏函数的帖子在拿装饰器举例对比。然后就想到既然装饰器本身也是函数,为啥不可以给装饰器也设置上参数,来进一步提高装饰器的复用性呢?于是把思路整理了一下,就有了本文。装饰器原理回顾​ 在我的另一篇关于装饰器的文章中有跟大家提到过,装饰器实际上就是一个闭包函数,在闭包函数的内部函数中添加装饰的内容并调用被装饰的函数。以达到 fun = decorator(fun) 的效果:def decorator(fun): d

2021-08-13 16:46:30 1584

原创 用递归算法实现开平方根

用递归算法实现开平方根前言​ 本文是用手算平方根的解法,用python代码实现,手算平方根方法学自西瓜视频李永乐老师,代码为个人原创。手算平方根方法​ 现在我们有一个非负数S,要求S的平方根。我们可以先将S拆成两个数相加,这两个数分别是小于等于S的完全平方数a^2,以及S与这个完全平方数的差b。那么就有等式:S = a^2 + b​ 然后就可以在这个等式的基础上开始变形了:​ 移项 : S - a^2 = b​ 利用平方差公式分解:(√S + a) (√S - a) = b​ 两

2021-08-10 16:19:14 3327

原创 python装饰器

一篇文章讲懂python装饰器函数闭包:函数内部嵌套函数闭包举例:def w(): print("闪开,我要开始装逼了") def f(): print("hello world!") return f# 调用:res = w()res()# 或w()()​ 闭包就是在一个函数内部再定义一个函数,外部的函数返回内部函数名。这样,仅仅调用外部函数得到的就只是执行非内部函数部分的函数体,并返回一个内部函数名。因作用域的关系,外部函数体以外是调用不到内

2021-08-03 17:23:51 445 2

原创 面向对象三个常见装饰器

python面向对象三个常见装饰器前言本篇文章我要讲述的是python面向对象的三个常见装饰器,它们分别是封装能够访问私有属性之方法的**@property**,封装类方法的**@classmethod**,以及封装静态方法的**@staticmethod**。这三者之间的区别就在于使用的变量是来自对象的属性还是类本身的属性,亦或者二者皆不是。​ 下面我将用一个案例来描述刚刚提到的不同属性的区别一个三种装饰器的应用。不同的属性​ 属性按外部是否可调用分为私有属性(外部不可访问)、非私有属性(外

2021-08-02 14:53:50 297

原创 一行写if条件语句总结

一行写if条件语句总结写法先上正常条件语句写法:num = int(input("随便给个整数:"))def fun(num): if num & 2 == 0: return "偶数” else: return "奇数"print(fun(num))一行写if判断的语法:判断为真时内容 if 判断条件 else 判断为假时内容def func(num): return "偶数" if num % 2 == 0 else "奇

2021-07-29 17:51:34 3564

原创 还在收藏jupyter notebook快捷键?没必要,记住这一个就够了

还在收藏jupyter notebook快捷键?没必要,记住这一个就够了初学者不熟悉jupyter notebook快捷键,我相信绝大多数人都有在百度上搜索过jupyter notebook快捷键整理大全的帖子。实话说,我刚接触jupyter notebook的时候也搜索过,直到有一天我无意中按到了一个键。。。都挺忙的,直接上干货:选中任意单元格按Esc键切换至命令模式,再按H键就可以直接查看键盘快捷键,根本不用去百度...

2021-07-23 17:32:02 109 1

原创 pandas修改特定的值

pandas修改特定的值map、apply映射map和apply都是用于映射的,map一般用于Series对象,而apply用于DataFrame对象。简答的讲,就是如果要对某一列数据进行映射,map和apply都可以;但是如果要对多列数据同时进行映射或者一个映射关系中涉及多个列作为自变量,就只能用apply而不能用map。所以很多观点认为apply比map更好用。​ 实际上map也有独特之处,例如,要针对某一列进行字典映射时,map函数可以直接接受字典,而apply就不支持字典类型参数。上代码对比:

2021-07-13 16:12:22 3809

原创 pypyodbc 连接Access数据库常见报错整理

pypyodbc 连接Access数据库常见报错整理一、背景​ 我目前用的数据库是Access,是微软旗下的一个小型数据库,有可视化界面,创建数据库跟创建一般的文件操作是一样的。创建好的数据库可以把它简单的理解成一个后缀为.odbc的文件,因为可以可视化操作,创建表也简单。所以创建库和表没必要写sql语句,不在本文描述范围内。​ 我这个人比较懒,喜欢把数据分析工作的例事写成python脚本,每周或者每个月运行一次,自己坐在旁边摸鱼就好了。脚本的思路是用python把相关的数据从Access数据库里

2021-07-10 14:15:03 2745 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除