在本文中,我们将为您详细介绍PostgreSQL列名是否区分大小写?的相关知识,此外,我们还会提供一些关于C++函数名是否区分大小写?、CSS选择器中的类名是否区分大小写?、CSS选择器中的类名是否区
在本文中,我们将为您详细介绍PostgreSQL 列名是否区分大小写?的相关知识,此外,我们还会提供一些关于C++ 函数名是否区分大小写?、CSS 选择器中的类名是否区分大小写?、CSS选择器中的类名是否区分大小写?、Django:身份验证用户名是否区分大小写?的有用信息。
本文目录一览:PostgreSQL 列名是否区分大小写?
我有一个 db 表,persons
在 Postgres 中由另一个具有列名的团队传下来,例如,"first_Name"
。现在我正在尝试使用 PG指挥官在这个列名上查询这个表。
select * from persons where first_Name="xyz";
它只是返回
错误:列“first_Name”不存在
不确定我是否在做一些愚蠢的事情,或者是否有解决我遗漏的问题的方法?
答案1
不是双引号的标识符*(包括列名)在 PostgreSQL 中被折叠为小写。使用双引号***创建并因此保留大写字母(和/或其他语法违规)的列名必须在其余生中使用双引号:
"first_Name"
值*(字符串文字/常量)用单引号括起来***:
''xyz''
所以,是的,PostgreSQL 列名是区分大小写的(双引号时):
SELECT * FROM persons WHERE "first_Name" = ''xyz'';
我的长期建议是只使用合法的小写名称,这样就不需要双引号了。
C++ 函数名是否区分大小写?
在
C++ 中函数名是否区分大小写?
在 C++ 中,函数名确实是区分大小写的。这意味着函数名中的大小写拼写会影响函数的唯一性。
例如,以下两个函数由于函数名的大写拼写不同而被认为是两个不同的函数:
立即学习“C++免费学习笔记(深入)”;
void MyFunction() {} void MYFUNCTION() {}
在编译器中,这些函数将被视为不同的符号。
实战案例
考虑以下程序:
#include <iostream> using namespace std; void myFunction() { cout << "myFunction" << endl; } void MyFunction() { cout << "MyFunction" << endl; } int main() { myFunction(); // 输出 "myFunction" MyFunction(); // 错误:未定义的标识符 return 0; }
在这个案例中,myFunction 和 MyFunction 是两个不同的函数,因为大小写拼写不同。当你尝试调用 MyFunction 时,编译器将无法找到它,因为该名称不存在。
因此,在 C++ 中使用函数时,请务必注意大小写拼写。
以上就是C++ 函数名是否区分大小写?的详细内容,更多请关注php中文网其它相关文章!
CSS 选择器中的类名是否区分大小写?
我一直在阅读 CSS 不区分大小写的文章,但我有这个选择器
.holiday-type.Selfcatering
当我像这样在我的 HTML 中使用它时,它会被拾取
<div>
如果我像这样更改上面的选择器
.holiday-type.SelfCatering
然后样式不会被拾取。
有人在说谎。
答案1
小编典典CSS 选择器通常不区分大小写;这包括类和 ID 选择器。
但是HTML 类名 区分
大小写(请参阅属性定义),这会导致您的第二个示例不匹配。这在HTML5中没有改变。1
这是因为选择器的大小写敏感性取决于文档语言的内容:
所有选择器语法在 ASCII 范围内都不区分大小写(即 [az] 和 [AZ]
是等效的),但不受选择器控制的部分除外。选择器中的文档语言元素名称、属性名称和属性值是否区分大小写取决于文档语言。
因此,给定一个带有Selfcatering
类但没有SelfCatering
类的 HTML
元素,选择器.Selfcatering
and[class~="Selfcatering"]
将匹配它,而选择器.SelfCatering
and[class~="SelfCatering"]
不会。2
如果文档类型将类名定义为不区分大小写,那么无论如何您都会有匹配项。
1 在所有浏览器的 quirks 模式下,类和 ID
不区分大小写。这意味着大小写不匹配的选择器将始终匹配。由于遗留原因,此行为在所有浏览器中都是一致的,并在本文中有所提及。
2 对于它的价值,选择器级别 4[class~="Selfcatering"i]
包含一个建议的语法,用于强制使用or对属性值进行不区分大小写的搜索[class~="SelfCatering" i]
。两个选择器都会将 HTML
或 XHTML 元素与一个Selfcatering
类或一个SelfCatering
类(当然,两者兼有)进行匹配。然而,类或 ID
选择器还没有这样的语法(还没有?),大概是因为它们带有与常规属性选择器不同的语义( 没有 与之关联的语义),或者因为很难提出可用的语法。
CSS选择器中的类名是否区分大小写?
我到处都读到CSS不区分大小写,但是我有这个选择器
.holiday-type.Selfcatering
当我像这样在HTML中使用时,它会被拾取
<div>
如果我这样改变上面的选择器
.holiday-type.SelfCatering
这样就不会拾取样式。
答案1
小编典典CSS选择器通常不区分大小写;这包括类和ID选择器。
但是HTML类名 _是_区分大小写的(见属性定义),这就是导致你的第二个例子不匹配。HTML5中没有更改。1个
这是因为选择器的区分大小写取决于文档语言的含义:
在ASCII范围内,所有Selectors语法均不区分大小写(即[az]和[AZ]等效),但不受Selectors控制的部分除外。选择器中文档语言元素名称,属性名称和属性值的区分大小写取决于文档语言。
因此,给定一个具有Selfcatering
类但没有SelfCatering
类的HTML元素,选择器.Selfcatering
和[class~="Selfcatering"]
将匹配它,而选择器.SelfCatering
和[class~="SelfCatering"]
将不匹配
。2
如果文档类型将类名定义为不区分大小写,则无论如何都会有一个匹配项。
1
在所有浏览器的怪癖模式下,类和ID不区分大小写。这意味着大小写不匹配的选择器将始终匹配。由于遗留原因,此行为在所有浏览器中都是一致的,并在本文中进行了提及。
2 值得一提的是,选择器4级)包含一个建议的语法,用于强制使用[class~="Selfcatering"i]
或对属性值进行不区分大小写的搜索[class~="SelfCatering"i]
。这两个选择器都会将HTML或XHTML元素与一个Selfcatering
类或一个SelfCatering
类(或者,当然两者)匹配。但是,类或ID选择器还没有这样的语法(还可以吗?),可能是因为它们具有与常规属性选择器(没有 关联的语义)不同的语义,或者是因为很难提出可用的语法。
Django:身份验证用户名是否区分大小写?
Django默认情况下将用户名区分大小写,现在为了进行身份验证,我编写了自己的AuthenticationBackend
用户名以在身份验证时处理不区分大小写的用户名。
如所示:http :
//blog.shopfiber.com/?p=220
现在,问题是:
我有各种观点和util方法,与之相比username
有些刺痛。
即
request.user.username == username_from_some_other_system_as_str
现在,如果用户名是yugal
:
request.user.username == ''Yugal'' # Returns False
现在,它应该返回True
[我想要实现的目标]
为此,我记得C++
几天Operator Overloading
。但是我认为,对于djangoauthuser
来说,这样做并不是一个好主意,因为authuser
它与紧密相关django
。同样,重载==
将使其对整个类(不只是对username
字段)不区分大小写。
因此,username
即使进行整体比较,我也应该如何处理这种不区分大小写的问题。
注意:
get_username
始终无法创建一种返回小写用户名的方法,因为它将需要重构所有代码才能使用它。您可以一次为您的代码执行此操作,但是如果您使用的是第三方django应用程序,则无法执行此操作。我知道这
user.username.lower() = something.lower()
是可能的,但是容易出错,而不是针对多开发人员设置中经常使用的某些东西的写解决方案。我已
SomeModel.objects.filter(username__iexact=username)
尽可能使用过。但这仍然使系统容易受到任何不了解的开发人员的错误的影响。
=====================================
从概念上找出解决方案,但无法使其工作(帮助):
####### Custom CharField for username case-insensitivity #######from django.db.models.fields import CharFieldclass iUnicode: def __init__(self, value): self.value = value def __eq__(self, other): if isinstance(other, str) or isinstance(other, unicode): return self.value.lower() == other.lower() if isinstance(other, self.__class__): return other == self.value def __unicode__(self): return unicode(self.value) def __str__(self): return self.__unicode__()class UsernameCharField(CharField): def to_python(self, value): # Its not getting called unicode_val = super(CharField, self).to_python(value) return iUnicode(unicode_val)if User._meta.local_fields[1].name == ''username'': User._meta.local_fields[1] = UsernameCharField(max_length=30) User._meta.local_fields[1].model = User################################################################
我假设to_python
用于将从数据库接收的值转换为unicode
python中的值。但是,我想我to_python
没有接到电话。
这也将确保第三方应用程序不区分大小写,并且不需要任何重构。它将修补
User
其核心。我将添加到__init__.py
我的第一个INSTALLED_APP
我究竟做错了什么 ?
答案1
小编典典终于明白了:
经过大量的实验和对User
模型的最小影响,终于实现了它。[感谢 @freakish先生 的不同想法]
这里是 :
############ username case-insensitivity ############class iunicode(unicode): def __init__(self, value): super(iunicode, self).__init__(value) self.value = value def __eq__(self, other): if isinstance(other, str) or isinstance(other, unicode): return self.value.lower() == other.lower() if isinstance(other, self.__class__): return other == self.valuedef custom_getattribute(self, name): val = object.__getattribute__(self, name) if name == "username": val = iunicode(val) return valdef auth_user_save(self, *args, **kwargs): # Ensures lowercase usernames username = self.username if username and type(username) in [unicode, str, iunicode]: self.username = username.lower() # Only lower case allowed super(User, self).save(*args, **kwargs)User.__getattribute__ = custom_getattributeUser.save = MethodType(auth_user_save, None, User)#####################################################
我测试了它,并按预期工作。:D
因此,这是 测试用例 :
from django.test.testcases import TestCasedef create_user(data=''testuser''): email = ''%s@%s.com'' % (data, data) user = G(User, username=data, email=email, is_active=True) user.set_password(data) user.save() return userclass UsernameCaseInsensitiveTests(TestCase): def test_user_create(self): testuser = ''testuser'' user = create_user(testuser) # Lowercase self.assertEqual(testuser, user.username) # Uppercase user.username = testuser.upper() user.save() self.assertEqual(testuser, user.username)def test_username_eq(self): testuser = ''testuser'' user = create_user(testuser) self.assertTrue(isinstance(user.username, iunicode)) self.assertEqual(user.username, testuser) self.assertEqual(user.username, testuser.upper()) self.assertTrue(user.username == testuser.upper()) self.assertTrue(testuser.upper() == user.username) self.assertTrue(user.username == iunicode(testuser.upper()))
隐式不区分大小写的数据库查询
###################### QuerySet #############################def _filter_or_exclude(self, negate, *args, **kwargs): if ''username'' in kwargs: kwargs[''username__iexact''] = kwargs[''username''] del kwargs[''username''] if args or kwargs: assert self.query.can_filter(),\ "Cannot filter a query once a slice has been taken." from django.db.models import Q clone = self._clone() if negate: clone.query.add_q(~Q(*args, **kwargs)) else: clone.query.add_q(Q(*args, **kwargs)) return clonefrom django.db.models.query import QuerySetQuerySet._filter_or_exclude = _filter_or_exclude#############################################################
这将允许User.objects.get(username=''yugal'')
并User.objects.get(username=''YUGAl'')
产生相同的用户。
今天关于PostgreSQL 列名是否区分大小写?的介绍到此结束,谢谢您的阅读,有关C++ 函数名是否区分大小写?、CSS 选择器中的类名是否区分大小写?、CSS选择器中的类名是否区分大小写?、Django:身份验证用户名是否区分大小写?等更多相关知识的信息可以在本站进行查询。
本文标签: