zhangyanan0525 / learn-python Goto Github PK
View Code? Open in Web Editor NEW学习python
学习python
暂时没学多少。大体知道是个什么东西。电脑上跑了点代码。
Object-Relational Mapping
能将我们的对象自动的字节化到关系型数据库当中,充当业务逻辑层和数据库层的桥梁。
在Django的ORM中,一个类对应的就是一张表,一个对象对应数据库中一条记录,每个属性对应数据库中每个字段。当然数据库不一定非是mysql也可以是其他的关系型数据库。
在Django中我们如何开发模型类呢?这就是models.py文件的作用。
模型类有什么优势和劣势呢?
优势:不需要在代码里编写原声的sql语句了,能让我们通过操作对象的方式操作数据库,提升开发效率。
缺点:牺牲了执行效率,牺牲了性能。
贼多,用的时候去查吧
Meta封装了一些数据库的信息,我们称之为元数据。
python manage.py makemigrations生成数据库要执行的内容到migrations文件夹下面
python manage.py migrate执行我们刚生成的文件,把执行过程记录到django migrations表里,然后生成表。如果要删除模型类的话,首先是删除类的代码,然后删除migrations对应文件,然后删记录,然后删除那个表。(我没搞懂这他妈说的什么破玩意)
代码里导入或者在控制台里用命令导入json都是可以的
F:用于操作字段的数据。或将一个字段与另一个字段进行比较。
Q:结合AND,OR,NOT,|,~,&实现复杂的查询
与项目进行交互的命令行工具集的入口
输入 python manage.py会列出很多很多子命令。其中一个是runserver。
django自带的有一个小型的服务器。我们只要运行python manage.py runserver就可以启动它。
运行起来之后控制台会给出一个地址。127.0.0.1:8000如果我们想改变这个端口号。可以运行python manage.py runserver 9999就变成了9999
全称:python web server gatewag interface python服务器网关接口
python应用与web服务器之间的接口,只有我们实现了这个接口,web服务器才能识别我们。
url配置文件
项目中所有地址都需要我们自己去配置url
项目的总配置文件。
DEBUG:True/False debug模式
ALLOWED_HOSTS:为了限定请求中的host值,以防止黑客构造包来发送请求。只有在列表中的host才能访问。不建议配置成*
声明模块。默认为空
就能生成一个叫blog的应用。名字我随便起的。
不要忘了把这个名字添加到setting.py的INSTALL.APP里
数据移植(迁移)模块。内容django自动生成的
该应用的后台管理系统配置
当前应用的配置
数据模块
类似于mvc中的m(模型)
自动化测试模块
django给我们提供了自动化测试的功能。我们只要编写代码就可以了
执行相应的代码所在的模块
代码逻辑处理的主要地点
创建modles.py 并引入models模块
创建类,继承models.Model该类即是一张数据表
创建字段,字段即类里面的属性。
怎么把类转换成数据表呢?
1.运行命令python manage.py makemigrations app名(可选)
2.python manage.py migrate
就能生成数据表了
完了之后django会自动在migrations文件夹下生成移植文件
可以用python manage.py sqlmigrate 应用名 文件id 这个命令查看SQL语句
什么是admin。admin是django自带的一个强大的自动化数据管理界面。被授权的用户可以直接在admin中管理数据。
那我们怎么使用admin呢?
运行python manage.py createsuperuser 命令可以创建超级用户
地址是localhost:8000/admin/
对象三要素:id(身份标识)、type(数据类型)和value(值)
这个是表示不转义,使用真实字符。比如如下代码:
s = r'test\tddd'
s2 = 'test\tddd'
print(s)
print(s2)
输出结果是:
test\tddd
test ddd
其中s里面的\t就是使用真实字符\t,而不是转义为制表符
Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。
string = "It was the best of times,\n\
It was the worst of times."
len(string) 输出52
python中三引号可以将复杂的字符串进行复制:
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
re.match(pattern, string, flags=0)
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.search(pattern, string, flags=0)
re.search 扫描整个字符串并返回第一个成功的匹配。
re.compile(pattern[, flags])
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
str.capitalize()
str.upper()
str.lower()
str.title()
str.swapcase()
None 确实是object的实例
There is only one None.None只有一个
noms = ['peanut', 'butter', 'and', 'jelly']
List可以从后边取值哦
noms[-1] --> 'jelly'
noms[-3] -->'butter'
List可以取第n个到第m个,组成新数组.省略一个参数也能用。如果用上负数,就会很奇怪,奇葩的用法。
noms[2:2] -->[]
noms[2:20] -->['and', 'jelly']
noms[2:0] -->[]
noms[2:] -->['and', 'jelly']
noms[:2]-->['peanut', 'butter']
noms[2:-1] -->['and']
noms[1,-1] -->TypeError: list indices must be integers or slices, not tuple
noms[0,-1] -->TypeError: list indices must be integers or slices, not tuple
noms[0,-2] -->TypeError: list indices must be integers or slices, not tuple
可以用这种方式生成list: list(range(5)) --> [0, 1, 2, 3, 4]
list_comprehensions
还可以用list_comprehensions生成list:
L = [i + 1 for i in range(5)] -->[1,2,3,4,5]
这种方式用法很多很复杂,用时查文档
insert
knight = ['you', 'shall', 'pass']
knight.insert(2, 'not')
knight --> ['you', 'shall', 'not', 'pass']
这个方法没有返回值,但是会改变原list
append
stack = [10, 20, 30, 40]
stack.append('last')
stack --> [10, 20, 30, 40, 'last']
这个方法没有返回值,但是会改变原list
pop
stack = [10, 20, 30, 40]
popped_value = stack.pop()
popped_value ---> 40
assignment
1
first_name, last_name = [["Willie", "Rae"], "Johnson"]
first_name --> ["Willie", "Rae"]
last_name ---> "Johnson"
2
first_name = "Roy"
last_name = "Rob"
first_name, last_name = last_name, first_name
first_name ---> "Rob"
last_name ---> "Roy"
in 和not in
要判断特定的值是否存在列表中,可使用关键字in,判断特定的值不存在列表中,可使用关键字not in
letters = ['A','B','C','D','E','F','G']
if 'A' in letters:
print('A'+' exists')
if 'h' not in letters:
print('h'+' not exists')
join()和js里很不一样
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq ) -->a-b-c
range() 函数可创建一个整数列表,一般用在 for 循环中。
range(start, stop[, step])
type(range(5)) --> range
range(0, -10, -1) -->[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
但是括号中可以传参数,可以移除其他位置的元素。
会改变原list
for i in range(len(x)) :
print(x[i])
打印出
r
u
n
o
o
b
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同
type() 不考虑继承关系。isinstance() 考虑继承关系。
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
babel_fish = { 'one': 'uno', 'two': 'dos' }
dict也有len方法哦
len(babel_fish) --> 2
dict 也有dict.keys(),dict.values()方法
fromkeys()
fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
dict.fromkeys(seq[, value])
person = {}.fromkeys(('name', 'age', 'sex'),10)
person --->
这就是一个元组 : count_of_three = (1, 2, 5)
元组不能改,要想改,先转化成list,改完了再转换成tuple
元组的转化: tuple("Surprise!") ---> ('S', 'u', 'r', 'p', 'r', 'i', 's', 'e', '!')
来点神奇的东西:
().__class__ --->tuple
(1).__class__ --->int
'1' == (1) ---> False
__doc__用来访问模块,类声明或者函数的声明中第一个未被赋值的字符串.
def method_with_documentation(self):
"A string placed at the beginning of a function is used for documentation"
return "ok"
method_with_documentation.__doc__ --> 'A string placed at the beginning of a function is used for documentation'
1、 _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入 。
2、 __xx 双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问了,连子类也不可以用于命名一个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo)
3、 __xx__定义的是特列方法。用户控制的命名空间内的变量或是属性,如init , __import__或是file 。只有当文档有说明时使用,不要自己定义这类变量。 (就是说这些是python内部定义的变量名)
[] --->False
() --->False
{} --->False
set() --->False
None --->False
0 --->False
"" --->False
' ' --->True
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
把不是list的数据(比如set类型的数据)转成list类型返回。不会操作原数据。
list、tuple等都是可迭代对象,我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使⽤next()函数来获取下⼀条数据。iter()函数实际上就是调⽤了可迭代对象的 iter ⽅法。当然也可以用for in来循环
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.