contain相关知识
-
这10个问题你一定要会!你肯定忽略了!1、问题一关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "\\"" . $str1 . "\\" contains \\"" . $str2 . "\\""; } else { echo "\\"" . $str1 . "\\" does not contain \\"" . $str2 . "\\""; } 正确运行的输出结果: "yabadabadoo" does not contain "yaba" strpos是返回字符串str2在str1的位置,没有找到则返回false然而实际上这次返回了0而在if语句中0也被当
-
10个值得深思的 PHP 面试问题Q1 第一个问题关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "/"" . $str1 . "/" contains /"" . $str2 . "/""; } else { echo "/"" . $str1 . "/" does not contain /"" . $str2 . "/""; } 正确运行的输出结果: "yabadabadoo" does not contain "yaba" strpos是返回字符串str2在str1的位置,没有找到则返回false然而实际上这次返回了0而在if语句中0也被当作false,所以我们需要对false做类型判断,正确的
-
源码有毒:Jfinal源码解析(二)public Routes add(String controllerKey, Class<? extends Controller> controllerClass, String viewPath) { if (controllerKey == null) throw new IllegalArgumentException("The controllerKey can not be null"); // if (controllerKey.indexOf(".") != -1) // throw new IllegalArgumentException("The controllerKey can not contain dot character: \".\""); controllerKey = controllerKey.trim(); if ("".equals(controllerKey)) throw
-
回到页面指定位置的三种方式以前大部分时间都是在做b端相关的项目,在实现此类需求时, 通常都是直接借助a标签搞定,现在做c端了,对交互性的要求一下就提升了,此时a标签就远远不能满足要求了,需要借助js来实现此类需求,特此记录。a 标签首先放出html<body> <contain class="test1"> <a name="topAnchor"></a> <div id="top">我是顶部</div> <div></div> <div></div> <div></div> <div></div> <div></div> </contain> <footer> <
contain相关课程
contain相关教程
- 2. 解决方案 聪明的同学早就猜到了我们肯定有一个能够控制背景图大小的语法:background-size:图片尺寸;图片尺寸可以是cover或contain这种关键字也可以是具体的宽高,如:background-size: 100px 50px;还可以是百分比,如:background-size: 100% 50%;此时我们需要把背景图的大小调到一个恰好能够适应盒子宽高的这么一个数值:893于是就可以把图标完美的呈现出来了:如果雪碧图过大可以调小背景尺寸,反之亦然。
- 3.2 多行注释 多行注释是在 /* */ 的两个星号中间来编写注释内容,以 /* 开头,换行的话每一行都以 * 号开头,最终以 */ 结尾,多行注释是会被编译到 CSS 中的,并且在多行注释中我们可以使用插值,如果你忘记了什么是插值,赶快复习一下前面的 Sass 插值章节。下面我们举例看下多行注释:/* This is a comment * contain interpolation: * 1 + 1 = #{1 + 1} * 8 * 8 = #{8 * 8} */.box2 { width: 200px; height: 100px; p { color: red } .main { width: 100%; heigth: auto }}上面的代码转换为 CSS 如下:/* This is a comment * contain interpolation: * 1 + 1 = 2 * 8 * 8 = 64 */.box2 { width: 200px; height: 100px;}.box2 p { color: red;}.box2 .main { width: 100%; heigth: auto;}通过上面的代码可以看出,多行注释最终将会被编译为 CSS 的多行注释并带到 CSS 中去,而且在多行注释中可以使用插值来进行一些运算。在默认的情况下,如果处于压缩模式,则转换后的 CSS 中也是不包含多行注释的,如果你忘了什么是压缩模式,赶快复习下 Sass 输出格式章节。所以我们可以通过以 /*! 开头,来保证多行注释在任何模式下都会被转换为 CSS 输出。我们举例看下:/*! This comment will be * included even in every mode. */.box2 { width: 200px; height: 100px; p { color: red } .main { width: 100%; heigth: auto }}通过上面这种注释方式就可以保证你的注释内容在任何模式下都会被输出。
- 3. 反应堆 反应堆指的是整个项目中所有模块的构建结构。在本节的例子中,整个构建结构包括三个模块。反应堆不仅仅包括模块本身,还包括了这三个模块直接的相互依赖关系。现在,我们的示例项目中,mall-core 和 mall-account 是不存在依赖关系的。父模块中模块的配置顺序如下:<!-- 模块配置 --><modules> <module>mall-core</module> <module>mall-account</module></modules>这里我们稍微做一下调整,用户管理模块可以提供接口给核心业务模块来调用,因此,在 mall-core 模块中引入 mall-account 依赖。重新进行项目构建。[INFO] Scanning for projects...[INFO] ------------------------------------------------------------------------[INFO] Reactor Build Order:[INFO][INFO] mall-aggregator [pom][INFO] mall-account [jar][INFO] mall-core [jar][INFO][INFO] ----------------------< com.mic:mall-aggregator >-----------------------[INFO] Building mall-aggregator 1.0.0-SNAPSHOT [1/3][INFO] --------------------------------[ pom ]---------------------------------[INFO][INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ mall-aggregator ---[INFO][INFO] ------------------------< com.mic:mall-account >------------------------[INFO] Building mall-account 1.0.0-SNAPSHOT [2/3][INFO] --------------------------------[ jar ]---------------------------------[INFO] ...[INFO] -------------------------< com.mic:mall-core >--------------------------[INFO] Building mall-core 1.0.0-SNAPSHOT [3/3][INFO] --------------------------------[ jar ]---------------------------------[INFO] ...[INFO] ------------------------------------------------------------------------[INFO] Reactor Summary for mall-aggregator 1.0.0-SNAPSHOT:[INFO][INFO] mall-aggregator .................................... SUCCESS [ 0.220 s][INFO] mall-account ....................................... SUCCESS [ 1.006 s][INFO] mall-core .......................................... SUCCESS [ 0.132 s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.533 s[INFO] Finished at: 2020-05-05T14:25:48+08:00[INFO] ------------------------------------------------------------------------从构建的结果来看,模块的构建顺序并不是按照我们在父模块中配置的顺序进行的,而是 Maven 在经过分析之后,生成反应堆,根据反应堆的构建顺序来进行构建的。实际上,Maven 会根据模块间继承与依赖的关系来形成一个有向非循环图,并根据图中标记的顺序,来生成反应堆构建顺序,在构建的时候,根据这个顺序来进行构建。本节中的实例项目的有向非循环图如下:继承与依赖关系的有向非循环图 在这个图中,是不能出现循环的,假如我们在 mall-account 模块中也添加入 mall-core 的依赖,再进行项目构建的时候,Maven 则会报错出来,提示我们这个反应堆中存在循环引用。[INFO] Scanning for projects...[ERROR] [ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='com.mic:mall-account:1.0.0-SNAPSHOT'}' and 'Vertex{label='com.mic:mall-core:1.0.0-SNAPSHOT'}' introduces to cycle in the graph com.mic:mall-core:1.0.0-SNAPSHOT --> com.mic:mall-account:1.0.0-SNAPSHOT --> com.mic:mall-core:1.0.0-SNAPSHOT @[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='com.mic:mall-account:1.0.0-SNAPSHOT'}' and 'Vertex{label='com.mic:mall-core:1.0.0-SNAPSHOT'}' introduces to cycle in the graph com.mic:mall-core:1.0.0-SNAPSHOT --> com.mic:mall-account:1.0.0-SNAPSHOT --> com.mic:mall-core:1.0.0-SNAPSHOT -> [Help 1][ERROR][ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR][ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleException
- 2.1 json() 方法 带着这两个问题我们来看看 requests 库的源码,可以看到 requests 模块的源码非常少,比较适合阅读。首先看第一个问题,就是要分析下 Response 结果的 json() 方法即可,比较容易找到:# 源码位置:requests/models.py# ...class Response(object): # ... def json(self, **kwargs): r"""Returns the json-encoded content of a response, if any. :param \*\*kwargs: Optional arguments that ``json.loads`` takes. :raises ValueError: If the response body does not contain valid json. """ if not self.encoding and self.content and len(self.content) > 3: # No encoding set. JSON RFC 4627 section 3 states we should expect # UTF-8, -16 or -32. Detect which one to use; If the detection or # decoding fails, fall back to `self.text` (using chardet to make # a best guess). encoding = guess_json_utf(self.content) if encoding is not None: try: return complexjson.loads( self.content.decode(encoding), **kwargs ) except UnicodeDecodeError: # Wrong UTF codec detected; usually because it's not UTF-8 # but some other 8-bit codec. This is an RFC violation, # and the server didn't bother to tell us what codec *was* # used. pass return complexjson.loads(self.text, **kwargs) # ...上面的 json() 方法中最核心的只有一句:complexjson.loads(self.content.decode(encoding), **kwargs)而这句和我们前面的得到响应内容,然后使用 json.loads() 是一样的,不过这里使用的是 complexjson。继续看看这个 complexjson 的定义:# 源码位置:requests/models.pyfrom .compat import json as complexjson# 源码位置:requests/compact.pytry: import simplejson as jsonexcept ImportError: import json可以看到,这个 complexjson 其实就是 Python 的第三方 json 模块或者是 Python 的内置 json 模块。因此,对于第一个问题就是显而易见了,使用 r.json() 和我们用 json.loads(r.text) 得到的结果基本是一致的。
- 2.1 Django 中的模型说明 在 Django 中,一个模型(model)会映射到一个数据库表。每个模型都是一个Python 类,它是django.db.models.Model 的子类,模型的每个属性都代表一个数据库字段。例如下面的代码中,我们定义了一个 Member 类。每个 model 会属于 Django 中的一个应用,我们通常会将每个应用的 models 写到该应用目录下的 models.py 中。# first_django_app/hello_app/models.pyfrom django.db import modelsclass Member(models.Model): sex_choices = ( (0, '男'), (1, '女'), ) name = models.CharField('姓名', max_length=30) age = models.CharField('年龄', max_length=30) sex = models.SmallIntegerField('性别', choices=sex_choices, default=0) occupation = models.CharField('职业', max_length=30) phone_num = models.CharField('手机号', max_length=14, null=True) email = models.EmailField('邮箱', blank=True) city = models.CharField('城市', max_length=30) register_date = models.DateTimeField('注册时间', auto_now=True) def __str__(self): return "<%s, %s>" % (self.name, self.phone_num) class Meta: # 通过db_table自定义数据表名 db_table = 'member' 上面模型类的定义中,我们看到几个和模型相关的字段类,比如 CharField、SmallIntegerField 等。Django 中定义了许多类似的字段类,这些字段类和数据库中字段的类型是一一映射的。以 MySQL 为例:# 源码地址 django/db/backends/mysql/base.py# ...class DatabaseWrapper(BaseDatabaseWrapper): vendor = 'mysql' display_name = 'MySQL' # This dictionary maps Field objects to their associated MySQL column # types, as strings. Column-type strings can contain format strings; they'll # be interpolated against the values of Field.__dict__ before being output. # If a column type is set to None, it won't be included in the output. data_types = { 'AutoField': 'integer AUTO_INCREMENT', 'BigAutoField': 'bigint AUTO_INCREMENT', 'BinaryField': 'longblob', 'BooleanField': 'bool', 'CharField': 'varchar(%(max_length)s)', 'DateField': 'date', 'DateTimeField': 'datetime(6)', 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 'DurationField': 'bigint', 'FileField': 'varchar(%(max_length)s)', 'FilePathField': 'varchar(%(max_length)s)', 'FloatField': 'double precision', 'IntegerField': 'integer', 'BigIntegerField': 'bigint', 'IPAddressField': 'char(15)', 'GenericIPAddressField': 'char(39)', 'NullBooleanField': 'bool', 'OneToOneField': 'integer', 'PositiveIntegerField': 'integer UNSIGNED', 'PositiveSmallIntegerField': 'smallint UNSIGNED', 'SlugField': 'varchar(%(max_length)s)', 'SmallIntegerField': 'smallint', 'TextField': 'longtext', 'TimeField': 'time(6)', 'UUIDField': 'char(32)', } # ... # ...从上面这部分源码可以看到,Django 中定义的这些字段类都会和 MySQL 中的字段的类型是一一对应的。接下来介绍常用的 Field 类型以及相关的属性选项。
- 2.3 TemplateView 类 介绍完上面那些基础的类以及 Mixin 后,终于可以看 TemplateView 的代码了,我们发现它其实就是 View 类中混入了 ContextMixin 和 TemplateResponseMixin,此外还多了一个 get 函数,对应着 get 请求。# 源码路径 django/views/generic/base.pyclass TemplateView(TemplateResponseMixin, ContextMixin, View): """ Render a template. Pass keyword arguments from the URLconf to the context. """ def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return self.render_to_response(context)就是这个 get 请求方法让我们前面第一个实验中,只需要写对应的模板文件名,另外传递 extra_context 就可以渲染模板并返回。注意,这个 extra_context 属性是继承自 ContextMixin 对象,它的赋值过程是走的 View 类。现在可以通过代码分析一下这个复制过程,加深印象。首先看 as_view() 函数传参部分:context_data = {'content':'正文1', 'spyinx':{'age': 29}}urlpatterns = [ path('test_template_view/', views.TestTemplateView.as_view(extra_context=context_data), name='test_template_View')]as_view() 方法的源码如下。传进来的参数在 initkwargs 中,最后在 View 类中使用该字典参数初始化实例。# 源码位置: django/views/generic/base.py @classonlymethod def as_view(cls, **initkwargs): # ... def view(request, *args, **kwargs): self = cls(**initkwargs) # ... # ... return view最后来看 View 的初始化函数。可以看到这些初始化的参数会作为类的属性进赋值,使用的是 setattr() 方法,这样我们在 as_view() 方法中传递的 extra_context 参数就被成功赋值到 extra_context 属性上了。class View: """ Intentionally simple parent class for all views. Only implements dispatch-by-method and simple sanity checking. """ # ... def __init__(self, **kwargs): """ Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things. """ # Go through keyword arguments, and either save their values to our # instance, or raise an error. for key, value in kwargs.items(): setattr(self, key, value)其实通过了解这些源代码后,我们能很好得理解前面使用 TemplateView 类做的一些测试结果。目前来看,我们接触到的这部分源代码还是比较简单易懂的,官方网站对 Django 中出现的许多常用类都做了详细的介绍,我们只需要不停的学习源代码、参考官方的文档、坚持不懈,一定能达到精通 Django 的目的。
contain相关搜索
-
c 正则表达式
c string
c 编程
c 程序设计
c 程序设计教程
c 多线程编程
c 教程
c 数组
c 委托
c 下载
c 线程
c 语言
caidan
cakephp
call
calloc
calu
camera
caption
case语句