如何高效使用配置文件
A. 如何使用MAC颜色配置文件改善笔记本屏幕色彩
点评:笔记本 屏幕颜色不准确,偏蓝或者过白,可以通过伽玛值或者饱和度亮度调整,但这有两个弊病: 1、进入 桌面 后才加载 配置文件 ,有颜色突变感。 笔记本屏幕颜色不准确,偏蓝或者过白,可以通过伽玛值或者饱和度亮度调整,但这有两个弊病: 1、进入桌面后才加载配置文件,有颜色突变感。 2、自己非专业人士,颜色把握不好。而MAC自带的ICC(设备色彩特性文件)参数设置的非常不错,相信套用它,可以让你的非苹果本儿也能有出色的显示效果。下面介绍两种方法,请仔细看。
本人屏幕:LG 以下两种方法适用对象:所有win7系统,不分平台不分机型!每个机子的扒竖效果会略有差异,LG屏上效果很好,此法其他屏幕,其他ICC,包括自己用profilemaker做的icc都能使用(XP的也可以用,不过默认ICC文件位置不同),重启有效,请严格操作!有两种方法,你可以通过LUT Manager,也可以不通过第三方软件。
方法1 Win下操作步骤: 1、安装LUTManager(32和64均可用); 2、将下载的ICC文件放入C盘根目录下的任意文件夹下,最好是不经常修改的,我新建了一个"Color”的文件夹。说明:"C:\windows\system32\spool\drivers\color”是Win7的默认ICC文件夹,不过这个文件夹在LUTManager下看不到,所以建议大家在C盘根目录新建了一个Color文件夹。
运行LUTManager,单击右侧“Load LUT”,然后找到你刚才下载的ICC文件,选择打开。你会发现你的RGB曲线和屏幕色彩都被上了苹果色。当然,如果你想对比刚才的效果,可以按ResetLUT。
最后只要按Setstartup,将该配置文件作为开机默认设置就OK了。
1、在桌面点击右键,进入“屏幕分辨率”里面的高级圆凳设置,然后点击颜色管理。
2、点击颜色管理窗口中的“高级”选项卡,然后点击“更改系统默认值”。 3、进入相关窗口后,还是点击“高级”选项卡,勾选下那个Windows显示器校准选项。
4、回到颜色管理-系统默认值的对话框。找到设备选项卡,将设备中选成:显示器1,勾选使用。 5、将下载的苹果颜色配置文件添加进去,并且与设备关联。 6、最后设置成为默认配置文件这样就完成了。
利用MAC的色彩配置文件进行校色后屏幕原春腔大本的蓝色会得到削减,你会感觉屏幕柔和了很多。对于苦恼屏幕偏白,偏蓝的朋友尤为有效(看下面对比,实际效果会很明显)。当然也需要承认,套用MAC颜色配置文件不能改变屏幕本身的素质,只是增强显示效果。如需要还原原本色调可以删除LUT Manager或者反向操作。
B. 机顶盒配制文件如何打开和修改
1 机顶盒配制文件可以打开和修改。
2 机顶盒配制文件通常是二进制文件,需要使用专业的编辑团樱软件才能打开和修改。
同时,由于机顶盒配制文件的格式不同,所以需要根据不同的机顶盒型号和厂商选择不同的编辑软件。
3 如果想要打开和修改机顶盒配制文件,需要先了解一些基础知识,如二进制文件的格式、机顶盒相关的协议和数据结构等。
同时,需要谨慎操作,避免对机顶盒造成不可逆的影响。
4 对于不熟悉机顶盒配郑或州制文件的用户来说,建议寻求专业人士的帮助,以避免不必要的喊蔽麻烦和损失。
C. Spring怎样高效的配置多套数据源
1、首先配置多个datasource
<!-- 主数据库的数据据源 -->
<bean id="masterDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.10.11:1521:trew" />
<property name="username" value="poi" />
<property name="password" value="poi" />
</bean>
<!-- 备份库的数据据源 -->
<bean id="slaveDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.10.12:1521:trew" />
<property name="username" value="poi2" />
<property name="password" value="poi2" />
</bean>
2、写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法
?
public class DynamicDataSource extends AbstractRoutingDataSource {
@SuppressWarnings("unused")
private Log logger = LogFactory.getLog(getClass());
@Override
protected Object determineCurrentLookupKey() {
return DbContextHolder.getDbType();
}
}
public class DbContextHolder {
@SuppressWarnings("rawtypes")
private static final ThreadLocal contextHolder = new ThreadLocal();
@SuppressWarnings("unchecked")
public static void setDbType(String dbType) {
contextHolder.set(dbType);
}
public static String getDbType() {
return (String) contextHolder.get();
}
public static void clearDbType() {
contextHolder.remove();
}
}
3. 配置动态数据源
<!--将DynamicDataSource Bean加入到Spring的上下文xml配置文件中去,同时配置DynamicDataSource的targetDataSources(多数据源目标)属性的Map映射。-->
<bean id="dataSource" class="cn.com.core.datasource.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="masterDataSource" value-ref="masterDataSource" />
<entry key="slaveDataSource" value-ref="slaveDataSource" />
</map>
</property>
<property name="defaultTargetDataSource" ref="masterDataSource"/>
</bean>
4.使用动态数据源(hibernate)
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="lobHandler" ref="lobHandler"/>
<property name="eventListeners">
<map>
<entry key="post-insert">
<ref bean="logListener"/>
</entry>
<entry key="post-update">
<ref bean="logListener"/>
</entry>
<entry key="post-delete">
<ref bean="logListener"/>
</entry>
</map>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle10gDialect
<!-- org.hibernate.dialect.OracleDerbyDialect -->
</prop>
<prop key="hibernate.show_sql">true</prop>
<!-- <prop key="hibernate.generate_statistics">true</prop> -->
<prop key="hibernate.connection.release_mode">
auto
</prop>
<prop key="hibernate.autoReconnect">true</prop>
<!--
<prop key="hibernate.hbm2ddl.auto">update</prop>
-->
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
</props>
</property>
</bean>
使用Hibernate时的事务管理配置示例:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
< property name="sessionFactory" ref="sessionFactory" />
bean>
D. nginx配置文件详解
一、安装Nginx
在安装Nginx之前,需确保系统已经安装了gcc、 openssl-devel、 pcre-devel和zlib-devel软件库。
其中, _with-http_stub_status_mole 可以用来启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的运行状态。
二、Nginx的配置文件结构
Nginx的配置文件nginx.conf位于其安装目录的conf目录下。
nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location。
main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
1、main块设置的指令将影响其他所有设置。
2、server块的指令主要用唤搜于指定主机和端口。
3、upstream指令主要用于负载均衡,设置一系列的后端服务器。
4、location块用于匹配网页位置。
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
三、Nginx的全局配置
events事件指令是设定Nginx的工作模式及连接数上限:
use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。
其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数和塌历,默认是1024。
最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。
四、下面配置Nginx的HttpGzip模块。这个模块支持在线实时压缩输出数据流。
通过/opt/nginx/sbin/nginx -V命令可以查看安装Nginx时的编译选项,由输出可知,已经安装了HttpGzip模块。
五、负载均衡配置
下面设定负载均衡的服务器列表:
upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
在上面的设定中,通过upstream指令指定了一个负载均衡器的名称cs.com。这个名称可以任意指定,在后面需要的地方直接调用即可,Nginx的负载均衡模块目前支持4种调度算法。
六、server虚拟主机配置
下面介绍对虚拟主机的配置。
建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过include指令包含进来,这样更便于维护和管理。
server标志定义虚拟主机开始,listen用于指定虚拟主机的服务端口,server_name用来指定IP地址或者域名,多个域名之间用空格分 开。index用于设定访问的默认首页地址,衫搏root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。
Charset用于 设置网页的默认编码格式。access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。
七、location URL匹配配置
URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。
以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。
八、StubStatus模块配置
StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用此功能。
stub_status设置为“on”表示启用StubStatus的工作状态统计功能。access_log 用来指定StubStatus模块的访问日志文件。auth_basic是Nginx的一种认证机制。
auth_basic_user_file用来指定认证的密码文件,由于Nginx的auth_basic认证采用的是与Apache兼容的密码文件,因此需要用Apache的htpasswd命令来生成密码文件。
然后输入两次密码后确认之后添加用户成功。
要查看Nginx的运行状态,可以输入http://ip/NginxStatus,输入创建的用户名和密码就可以看到Nginx的运行状态。
Active connections表示当前活跃的连接数,第三行的三个数字表示 Nginx当前总共处理了34561个连接, 成功创建次握手, 总共处理了354399个请求。
最后一行的Reading表示Nginx读取到客户端Header信息数, Writing表示Nginx返回给客户端的Header信息数,“Waiting”表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数。
在最后这段设置中,设置了虚拟主机的错误信息返回页面,通过error_page指令可以定制各种错误信息的返回页面。在默认情况下,Nginx会在主目录的html目录中查找指定的返回页面。
特别需要注意的是,这些错误信息的返回页面大小一定要超过512K,否者会被ie浏览器替换为ie默认的错误页面。
E. 如何使用outlook的配置文件对邮箱进行设置
控制面板--邮件---电子邮件账户---添加---第一个---依照TXT设置
F. 如何用VB读取ini配置文件
为了方便用户使用和使系统具有灵活性,大多数Win-dows应用程序将用户所做的选择以及各种变化的系统信息记录在初始化(INI)文件中。滚蚂因此,当系统的环境发生变化时,可以直接修改INI文件,而无需修改程序。由此可见,INI文件对系统功能是至关重要的。本文将介绍采用VisualBasicforWindows(下称VB)开发Windows应用程序时如何读写INI文件。
INI文件是文本文件,由若干部分(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,每个关键词会控制应用程序某个功能的工作方式,等号右边的值(value)指定关键词晌蚂的操作方式。其一般形式如下:
[section1]
keyword1=valuel
keyword2=value2
……
[section2]
keyword1=value1
keyword2=value2
……
其中,如果等号右边无任何内容(即value为空),那就表示Windows应用程序已为该关键词指定了缺省值,如果在整个文件中找不到某个关键词(或整个一部分),那同样表示为它们指定了缺省值。各个部分所出现的顺序是无关紧要的,在每一个部分里,各个关键词的顺序同样也无关紧要。
读写INI文件通常有两种方式:一是在Windows中用"记事本"(Notepad)对其进行编辑,比较简单,无需赘述;二是由Windows应用程序读写INI文件,通常是应用程序运行时读取INI文件中的信息,退出应用程序时保存用户对运行环境的某些修改。
关键词的值的类型多为字符串或整数型,应分两种情况大谨埋读写。为了使程序具有可维护性和可移植性,最好把对INI文件的读写封装在一个模块(RWINI.BAS)中,在RWI-NI.BAS中构造GetIniS和GetIniN函数以及SetIniS和Se-tIniN过程,在这些函数和过程中需要使用WindowsAPI的"GetPrivateprofileString"、"GetPrivateProfileInt"和"WritePrivateProfileString"函数。
RWINI.BAS模块的程序代码如下:
在General-Declearation部分中声明使用到的WindowsAPI函数:
Declare Function GetprivateprofileString Lib"Ker-nel"(ByVallpAppName As String,ByVallpKeyName As String,ByVallpDefault As String,ByVal lpRetrm-String As String,ByVal cbReturnString As Integer,ByVal Filename As String)As Integer
Declare FunctionGetPrivatePfileInt Lib "Kernel"(ByVal lpAppName As String,ByVal lpKeyName As String,ByVal lpDefault As Integer,ByVal Filename As String)As Integer
Declare Lib "Kernel"(ByVal lpApplicationName As String,ByVal lpKeyName As String,ByVal lpString As String,ByVal lplFileName As String)As Integer
Function GetIniS(ByVal SectionName As String,ByVal KeyWord As String,ByVal DefString As String)As String
Dim ResultString As String * 144,Temp As Integer
Dims As String,i As Integer
Temp%=GetPrivateProfileString(SectionName,KeyWord,"",ResultString,144,AppProfileName())
‘检索关键词的值
IfTemp%>0Then‘关键词的值不为空
s=""
Fori=1To144
IfAsc(Mid$(ResultString,I,1))=0Then
ExitFor
Else
s=s&Mid$(ResultString,I,1)
EndIf
Next
Else
Temp%=WritePrivateProfilesString(sectionname,KeyWord,DefString,ppProfileName())
‘将缺省值写入INI文件
s=DefString
EndIf
GetIniS=s
EndFunction
FunctionGetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefValue
AsIneger)AsInteger
DimdAsLong,sAsString
d=DefValue
GetIniN=GetPrivateProfileInt(SectionName,
KeyWord,DefValue,ppProfileName())
Ifd<>DefValueThen
s=""&d
d=WritePrivateProfileString(SectionName,
KeyWord,s,AppProfileName())
EndIf
EndFunction
SubSetIniS(ByValSectionNameAsString,BtVaKeyWordAsString,ByValValStr
AsString)
Dimres%
res%=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
EndSub
SubSetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValValInt
AsInteger)
Dimres%,s$
s$=Str$(ValInt)
res%=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())
EndSub
SectionName为每一部分的标题,KeyWord为关键词,GetIniS和GetIniN中的DefValue为关键词的缺省值,SetIniS和SetIniN的ValStr和ValInt为要写入INI文件的关键词的值。为了能更好地说明如何使用以上函数和过程,下面举两个实例。
实例1:
开发应用程序通常要使用数据库和其它一些文件,这些文件的目录(包括路径和文件名)不应在程序中固定,而是保存在INI文件中,程序运行时由INI文件中读入。读入数据库文件的代码如下:
DimDatabasenameAsString
Databasename=GetIniS("数据库","职工","")
IfDatabaseName=""ThenDatabaseName=InputBox("请输入数据库《职工》的目录"),
App.Title)’也可通过"文件对话框"进行选择
OnErrorResumeNext
Setdb=OpenDatabas(DatabaseName)
IfErr<>0Then
MsgBox"打开数据库失败!",MB-
ICONSTOP,App.Title:GotoErrorProcessing
Else
SetIniS"数据库","职工",DatabaseName
EndIf
OnErrorGoTo0
……
实例2:
为了方便用户操作,有时需要保存用户界面的某些信息,例如窗口的高度和宽度等。装载窗体时,从INI文件中读入窗体高度和宽度,卸载窗体时将窗体当前高度和宽度存入INI文件,代码如下:
Sub Form1_Load()
……
Forml.Height=GetIniN("窗体1","高度",6000)
Form1.Width=GetIniN("窗体1","高度",4500)
EndSub
……
Sub Form1_Unload()
……
SetIniN"窗体1","高度",Me.Height
SetIniN"窗体1,"宽度",Me.Width
……
End Sub
G. 用python类的形式怎样做管理系统-Python配置管理的几种方式
一、 为什么要使用配置
如果我们在较复杂的项目中不使用配置文件,我们可能会面临下面的情况:
你决定更改你的项目中数据库的 host, 因为你要将项目从测试环境转移到实际的生产环境中。如果你的项目中多个位置用到了这个 host,那你不得不一个一个找到这些位置再修改成新的 host。花了半天,然后过了一天,你发现项目在生产环境有些问题,需要重新移回测试环境,你得再次修改,这样工作很繁琐很不优雅。
你开发了一个很棒的开源项目,你想将其放到版本控制系统例如github上,但是你服务器的主机的地址、账号、密码也都上传上去了,但是你没有意识到,直到有个 bad guy 拿到了你的信息,从你的服务器窃取信息、攻击你的服务器,让你产生了极大的损失。然后你想把程序改动一下,把涉密的信息比如地址密码都删掉,可是由于版本控制的原因,别人依然能看到你以前版本的代码。于是你不得不改掉你的账户、密码等,真的是个悲伤的开源项目经历。
但是,如果你使用了配置管理呢,那会有以下几个优点:
这样就提高了代码的重用性,不再每次都去修改代码内部
这意味着其他不太懂你代码内部的人也可以使用你的项目,只用根据需求更改配置即可
有利于团队协作
有利于安全数据/秘密数据的管理
二、Python 中进行配置管理的几种方式
由于使用 Python 较多,因此基于 Python 进行配置管理的相关说明,当然其他语言也都是大同小异,主要思想还是不变。
2.1 使用 Python 内置的数据结构(如字典)
2.1.1单个文件下的单个配置
我们很自然就能想到这一点,例如以下代码:
在上面的代码中,我们可以看到,同一数据库配置,我们反复使用了两次,如果我们需要更改数启闹据库相关的数据如password,我们不需要在两个方法内部修改,而是只用修改DATABASE_CONFIG字典中的相关值即可。和以前没有配置管理的时候相比,减少了太迅知多的工作量了。
2.1.2多个文件下的单个配置
但是当你的项目开始变亩旁消得复杂的时候,你的文件就不止一个这么简单了,这时候如果我需要在 main2.py 里面需要用 DATABASE_CONFIG 的时候就不是很方便了,因为如果直接 import main 的时候,虽然能够使用 main.DATABASE_CONFIG ,但同时 mian.py 中的
也被执行了,这可不是我们想看到的,因此我们有了新的需求,能在同一个项目下的不同文件里简单快速的导入我们的数据库配置 DATABASE_CONFIG,于是我们想出了下面的方法来解决这个问题:
按照上面的代码,我们可以在两个不同的文件 main1.py 和 main2.py 中分别引用 config.py 中配置了,我们的配置管理看起来更进一步了。
2.1.3 单个文件下的多个配置
有可能我们的项目需要多个配置文件,比如测试环境和生产环境。先从单个文件讲起,我们可以采用如下解决方案:
这样我们就可以从一个配置文件中获取不同级别的不同配置了。
2.1.4 多个文件下的多个配置
和上面类似,只不过换成了从不同的文件中读取同一个配置文件的不同配置:
这样使用更加灵活了,从不同的文件里读取不同的配置,而我们对于配置的增删改只需要在 config.py 中进行,配置管理技能再次进阶!
2.2 使用外部配置文件
比起使用 Python 内建的数据结构,更加通用的方法是使用外部配置文件,因为这些文件只会被视为配置文件,而不会像 config.py 一样有代码的属性。外部配置文件的格式多种多样,我们在使用它的时候会根据文件格式有不同的读取方式。例如:*.yaml 或者 *.yml、*.json、*.cfg 或 *.conf 、*.ini , 甚至是你自定义的文件 *.yourname 。
2.2.1 YAML
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言[1],另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者[2]。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
----- 中文维基网络
YAML 看起来像下面这种格式:
如果需要从 python 写入配置到 YAML 也很容易,只需要使用 yaml.mp(dict) 即可,dict 指的是配置的字典。更加详细的内容可以查看 PyYAML Documentation
2.2.2 INI
INI文件是一个无固定标准格式的配置文件。它以简单的文字与简单的结构组成,常常使用在Windows操作系统,或是其他操作系统上,许多程序也会采用INI文件做为设置程序之用。Windows操作系统后来以注册表的形式取代掉INI档。INI文件的命名来源,是取自英文“初始(Initial)”的首字缩写,正与它的用途——初始化程序相应。有时候,INI文件也会以不同的扩展名,如“.CFG”、“.CONF”、或是“.TXT”代替。
----- 中文维基网络
它长得像这样:
这将输出 INI 配置文件中的 mysql section 中的 host 值
要写入 INI 配置文件也很简单,参考如下代码即可:
2.2.3 JSON
JSON是JavaScript对象表示法的缩写。它非常广泛,因此对许多编程语言都有很好的支持。它的格式大家也很眼熟,看起来和 Python 中的字典很像:
要将配置写入json中也很简单,参考以下代码:
其他格式的文件大多如此,就不赘述了。并且外部的配置文件中也可以配置多个配置(mysql, other等)
2.3 使用环境变量
但是,回到我们开篇讲的问题,以上的两种配置管理方案(使用 Python 内置的数据结构、使用外部配置文件) 都忽略了两个问题:
其一,我们如何应对安全数据直接曝光于公众的可能问题呢,如果我们需要使用版本控制系统例如 Github,或许我们可以尝试将 config.py 文件放到 .gitignore 里面,但我们如果哪一天修改了仓库,忘了将 config.py 忽略掉而 push 到了GitHub 上,那么我们的安全敏感信息仍然会向公众泄露,由于版本控制的存在,即使你删掉了还会有这条提交记录,处理起来会很麻烦。
其二,如果我们要在我们本地新开一个项目,这个项目也需要引用一样的数据库配置文件,或许我们可以找到第一个项目的文件夹,复制出 config.py 到 新的项目文件夹。嗯,看起来可行,但是,如果你要新开十几个项目呢,几百个项目呢?
因此我们可以引入下一种配置管理的方式,对解决上面提出的两个问题都是较为友好的解决方案,即使用环境变量,各种开发环境(Win、Mac、Linux)的系统环境变量的设置方式有所不同,可以参考这篇文章。
另外 PyCharm 和 VS Code 有更加方便的配置方式,可以为不同的项目分配不同的设置。
PyCharm 中,在菜单 Run->Edit configurations 中,手动设置Environment variables
VS Code 中,在 Setting 中搜索 env ,在 Terminal 中选择你的操作系统相关的Terminal > Integrated > Env: Your OS ,点击 settings.json 进行添加
使用环境变量配置值不用作为单独的文件进行管理,因此有较小的安全风险,它很容易使用,可以在你的开发环境中的任何项目任何代码库中使用,但是它的管理方式可能有些复杂。有些环境无法使用环境变量,比如Apache,Nginx等Web服务器,这时候就需要采用其他的方式。
2.4 使用动态加载
这种方法比利用 Python 内置的数据结构更加先进,内置数据结构的方法要求配置文件必须要在可以直接 import 的路径上。但是动态加载中,配置文件不必在可直接导入的路径上,甚至可以位于其他存储库中,这样的话,配置文件就和项目分隔开了,其他的项目也可以动态加载这个配置文件,例如:
三、总结
以上归纳了四种配置管理的方式,总体来说没有优劣之分,看个人的需要,甚至上面的几种方法可以混合使用,对于一些软件项目,它自身可能就提供了相关的变量配置入口,比如 airbnb 的 Airflow 。而且,当系统规模非常大时,最好使用主要提供配置管理的第三方工具或服务,相关服务可以参考这里。
H. 如何写出高效的程序
一个高质量的程序一定会有测试代码,记住无论程序功能多么简单,我们都要写测试代码。其中高效代码涉及到代码格式,代码语句,以及每一步代码的注释,这都是属于高效代码的要求。
普通程序员的变量命名很随便,扰逗答以至于随便到abcd都会出来,而高质量的代码的命名则很规范,缓慧既不长,也不短,既可以读出它们的含义,又不至于显得啰嗦,总之,从变量命名你就能读出一个程序是否优雅。
很多人喜欢在程序中通过注释来修改变量值,这样的做法非常不对,首先不说无用的注释影响了代码的整洁,就通过修改代码来修改变量的值就是不优雅的。
一个优秀的程序,一定是从配置文件中读取所需要的变指纳量的,而修改配置文件对于一个人来说远远比去源代码中修改变量值要方便得多得多。当你学会从配置文件中读取配置,修改配置的时候,你的程序才是优秀的。
I. 如何在一台服务器上配置搭建两个网站
在一台服务器上配置搭建两个网站的方法
最简单高效的方法如下:
1.先打开Apache的配置文件httpd.conf,在这个文件,
找到这句:“#Includeetc/extra/httpd-vhosts.conf”
(根据安装路径不同,上面的路径会略有喊慎念不同)
把前面的#去掉,即开启了使用虚拟主机的功能;
2.在httpd-vhosts.conf中进行虚拟主机的配置操作;也可以在httpd.conf直接写入配置,但是
不建议这么做;
3.打开httpd-vhosts.conf文件,找到NameVirutalHost*:80,这句话的含义是制孝银定这个主机的
IP地址和端口号;
4.关键的virtualhost配置,在NameVirutalHost*:80的下面;
注意事项:Apache在接受请求时,首先会默认第一个VirtualHost,然后再匹配其他虚拟主
机,如果没有匹配的,就是第一个VirtualHost起作用。故,在httpd.conf中,将
都默认设置为denyfromall。
5.virtualhost配置实例:
ServerName*
DocumentRoot
Orderdeny,allow
Allowfromall
后面的,依次添加就可以
其实建议你使用完善的管理程序辅助管理站点并不是因为你不会绑定域名而是因为你出现这个问题间接表郑困示你会有更多问题处理不了所以方便才是你的第一学习要点而不是那些所谓的技术进步能普普通通运营好简单的网站再考虑其他深入的问题
J. 如何使用MAC颜色配置文件改善笔记本屏幕色彩
改善苹果笔记本电脑屏幕色彩握弊可以通过系统偏好亏迹设置里的显示器进行调节,详情如下:
1.进入系段空族统桌面,点击系统偏好设置(灰色齿轮LOGO)。
2.点击显示器。
3.切换到颜色面板,查看当前显示描述文件。
4.选择普通RGB描述文件,观察屏幕变化。