目标:深入理解Django以及web开发深入知识,掌握Gin ,Go micro 框架 ,Kafka ,Zookeeper 为kubernetes Istio 做微服务,服务网格做铺垫 实现Python + Golang + Vue + Bootstrap + 还可以加上fabric提供区块链的服务
Go语言的应用领域:
服务端开发:日志处理系统,文件系统,监控服务
容器虚拟化:Docker Kubernetes
分布式存储:etcd(代替zookeeper)TiDB Groupcache
web开发:net/http(核心内置包,就是前面不挂Nginx并发都很高) Gin go micro
区块链:以太坊 fabric
学习知识和学习技能区别:技能需要实践和时间需要多加练习
ORM在线工具:editor.ponyorm
百度脑图
选择Flask到最后也需要拼装起来成Django,还不如整体的Django厉害,后来服务拆分才不用flask,tornado呢,用Gin
官网教程: https://www.djangoproject.com
Django 第三方插件: https://djangopackages.org/
基于 Django 的网站 :https://www.djangosites.org/
Python模块:https://pypi.org/
1.python(windows)的大坑:windows下带中文路径创建虚拟环境,pip后不是安装在虚拟环境里面的(醉了)但是在pycharm里面进行开发settings里面却是虚拟环境,需要自己在上面进行图形化install了
2.https://blog.51cto.com/somethingshare/2381237 虚拟环境的一些其他插件实用技巧
3.pycharm可以手动进行选择版本,舒服了
4.verbose_name=“电话” 在models里面每个都有一个这个字段进行注释
5. SEX_ITEM = [
(1, “男”),
(2, “女”),
(3, “未知”),
]
sex = models.IntegerField(choices=SEX_ITEM, verbose_name=“性别”)
可以进行选择有个chioces的字段
5.通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:
6.在自定义404错误页面时遇到的问题
DEBUG = False
ALLOWED_HOSTS = [“localhost”] # 如果开启DEBUG = False 必须设置可以访问的对象
settings里面的配置
7.在服务器环境下,要通知WSGI应用当前使用的是哪个配置文件,用到 os.environ:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
WSGI的配置 告诉他是这个下面的settings文件呀
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chayeproject.settings')
application = get_wsgi_application()
8.在无需配置的情况下,Django配置文件没必要定义任何配置项。因为每个配置项都有一个明确的默认值。默认值都保存在模块 django/conf/global_settings.py 中
9.在 Python 代码中使用 settings,在具体的Django应用中, 通过引入 django.conf.settings 使用配置, 例:
from django.conf import settings
if settings.DEBUG:
10.不建议在运行时更改设置. 比如, 不要在view中这样用:
from django.conf import settings
settings.DEBUG = True # Don't do this!
11.由于配置文件包含敏感信息, 比如数据库密码, 所以应该限制对配置文件的访问. 比如更改文件权限, 从而只能令你和你的WEB服务器能读取配置文件. 这在共享主机的环境中非常重要!
思考:在linux上只有root身份可以打开settings文件
其余的普通用户只是可读
放业务的服务器不会暴露在公网上,前面挂个Nginx给带进来
12.在应用中创建自己的配置文件很简单,只要遵循以下的规范:
13.由于配置文件是序列化的,Django 使用列表,但仅是约定俗成
14.某些场合中, 你想绕过 DJANGO_SETTINGS_MODULE 环境变量来进行配置。比如,你正在使用 Django 自带的模板系统,而你并不想使用环境变量指定某个具体的配置文件。
在这种情况下,可以手动设定 Django 的配置项。要用到下面这个方法:
from django.conf import settings
settings.configure(DEBUG=True)
通过 configure() 可以设置任何配置项,每个参数对应一个值。参数名称必须大写,而且参数名必须是真实存在。没有在 configure() 中出现的设置项在随后用到时,仍会使用默认值。
15.如果你并不想使用整个框架,仅仅是其中一小部分时,如上述这般配置 Django 是非常必要的。事实上,我们建议您这样做
16.因此,通过 settings.configure() 配置 Django 时,并不会对当前进程的环境变量做任何修改。(可以查看 TIME_ZONE 了解为什么要这么做)。这意味着在上述情况下你仍然完全掌控着当前环境。
17.在下面这个例子中,由 myapp_defaults 提供默认值,并令 DEBUG 被置为 True 而不是从 myapp_defaults 中获取:
from django.conf import settings
from myapp import myapp_defaults
settings.configure(default_settings=myapp_defaults, DEBUG=True)
接下来例子使用 myapp_defaults 做为一个位置参数,这和上面的效果是等同的:
settings.configure(myapp_defaults, DEBUG=True)
18.一般来说,没必要自行设置默认值。Django 的默认设置是比较宽松的,你可以放心地使用。要注意的是,如果你传入了新的默认模块,那它就会完全 替换 Django 本身的默认设置。因此,你必须为接下来可能会用到的所有设置项都重新指定默认值。查看 django.conf.global_settings 了解全部默认值。
import django.conf.global_settings
19.configure() 或 DJANGO_SETTINGS_MODULE 二者必用其一,都不用也不行,都用也不行
20.如果你使用了“独立” Django 的组件——比如,编写一个 Python 脚本,它加载了一些 Django 模板并渲染了它们,或使用 ORM 获取数据——你需要额外的配置一下设置文件。
在你已经配置 DJANGO_SETTINGS_MODULE 或调用 configure() 后,你需要调用 django.setup() 来加载你的设置,并填写的 Django 的应用注册表。例子:
import django
from django.conf import settings
import myapp_default
settings.configure(default_settings=myapp_default, DEBUG=True)
django.setup()
# Now this script or any imported module can use any part of Django it needs.
注意,仅在你的代码是真的独立的情况下调用 django.setup()。当被你的 Web 服务器调用时,或通过 django-admin 调用,Django 会帮你处理这些。
21.django.setup() 只需调用一次。
因此,避免将可服用的应用逻辑代码放入独立脚本中。是故,你必须在你的应用中从此脚本中导入。若你无法避免这样做,将 django.setup() 调用至于 if 块内:
if __name__ == '__main__':
import django
django.setup()
22.我们认为我们的的模板引擎是最好的,但是我们意识到选择一个模板语言和信仰宗教相似。Django 没有什么必须的模板语言,如果你愿意使用 Jinja2、Mako 或其他的,请随意使用。
23.如果你使用其他的数据库库,你没办法使用 Django 自动生成的后台界面。这个应用是和 Django 数据库层耦合的。
24.django.db.models.fields 一切秘密都在fields里面
25.在你需要一个自定义字段时,只需创建两个类:
26.重写Field模块
# This is a much more flexible example.
class BetterCharField(models.Field):
def __init__(self, max_length, *args, **kwargs):
self.max_length = max_length
super().__init__(*args, **kwargs)
def db_type(self, connection):
return 'char(%s)' % self.max_length
# In the model:
class MyModel(models.Model):
# ...
my_field = BetterCharField(25)
27.要查看超多的例子,查阅 Django 默认的 filters 和 tags 源码。它们分别位于 django/template/defaultfilters.py 和 django/template/defaulttags.py
28.永远不要在生产环境打开 debug 开关。
开发时,你当然要配置 DEBUG = True,这将方便你在浏览器启用完全回溯功能。
29.不过,对于生产环境来说,这真是一个坏主意,因为这会泄露很多超出预期的信息:代码摘要,本地变量,配置项,使用的库,等等。
30.生产环境与开发环境的数据库连接参数可能是不同的。
数据库密码是机密的。你应该像保护 SECRET_KEY 那样保护它们。
为了最大限度的安全,确保数据库只为来自你应用的连接提供服务。
如果你还未为数据库设置备份,现在就做!
31.部署静态文件rsync
32.ALLOWED_HOSTS 默认值:( [])
表示此Django站点可以提供的主机/域名的字符串列表。这是一种防止HTTP主机头攻击的安全措施,即使在许多看似安全的Web服务器配置下也是如此。
33.此列表中的值可以是完全限定名称(例如’www.example.com’)
34.当DEBUGis True和ALLOWED_HOSTS为空时,将验证主机。[‘localhost’, ‘127.0.0.1’, ‘[::1]’]
35.ENGINE
默认值:( ''空字符串)
要使用的数据库后端。内置的数据库后端是:
‘django.db.backends.postgresql’
‘django.db.backends.mysql’
‘django.db.backends.sqlite3’
‘django.db.backends.oracle’
您可以通过设置ENGINE为完全限定的路径(即mypackage.backends.whatever)来使用Django未附带的数据库后端 。
36.EMAIL_BACKEND
默认: ‘django.core.mail.backends.smtp.EmailBackend’
37.EMAIL_HOST
默认: ‘localhost’
38.EMAIL_PORT¶
默认: 25
39.TEMPLATES
默认值:( []清单)
包含与Django一起使用的所有模板引擎的设置的列表。列表中的每个项目都是包含单个引擎选项的字典。
这是一个简单的设置,告诉Django模板引擎从templates每个已安装的应用程序内的子目录加载模板:
TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
‘APP_DIRS’: True,
},
]
以下选项适用于所有后端。
BACKEND
默认值:未定义
要使用的模板后端。内置模板后端是:
‘django.template.backends.django.DjangoTemplates’
‘django.template.backends.jinja2.Jinja2’
您可以通过设置BACKEND为完全限定的路径(即’mypackage.whatever.Backend’)来使用Django未附带的模板后端 。
40.核心设置
41.由于静态文件服务器并不运行 Django,你需要将部署策略改成这样:
当静态文件改变时,本地运行 collectstatic。
将本地 STATIC_ROOT 推送到静态文件服务器提供服务的目录。 rsync 是一个常见选项,因为这种配置只会传输文件修改部分的数据流。
42.从云服务或 CDN 提供静态文件服务
另一种常见的策略是从类似亚马逊 S3 的云存储服务商或 CDN (content delivery network) 提供静态文件服务。这能让你忽略提供静态文件服务可能出现的问题,提供 Web 页面加载速度(尤其是在用 CDN 的时候)。
使用这些服务时,基本的工作流程与上面类似,除了要将静态文件传输给存储服务商或 CDN,而不是用 rsync 将静态文件传输给服务器。
有很多中方法可以实现目的,但是若服务商提供一个 API 自定义文件存储后端,这将会使流程难以置信的简单。若你已编写或正在使用第三方的自定义存储后端,你可以通过将 STATICFILES_STORAGE 指向该存储引擎告诉 collectstatic 启用它。
例如,若你已在 myproject.storage.S3Storage 中写了一个 S3 存储后端,可以这么用:
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
只要完成了上述流程,你就只需运行 collectstatic,静态文件将通过存储包推送给 S3。如果稍后需要切换至另一个存储服务商,只需简单地修改 STATICFILES_STORAGE 配置。
43.https://djangopackages.org/grids/g/storage-backends/ 自定义存储的后端
file:///C:/Users/10430/Desktop/django2.2.x/howto/custom-file-storage.html 编写一个自定义存储系统
44.更新django
pip install -U Django
45.默认情况下, Django 会给每一个模型添加下面的字段:
id = models.AutoField(primary_key=True)
如果你想自己指定主键, 在你想要设置为主键的字段上设置参数 primary_key=True。如果 Django 看到你显式地设置了 Field.primary_key,将不会自动在表(模型)中添加 id 列。
46.除了 ForeignKey, ManyToManyField 和 OneToOneField,任何字段类型都接收一个可选的位置参数 verbose_name,如果未指定该参数值, Django 会自动使用字段的属性名作为该参数值,并且把下划线转换为空格。
47.blank字段 表单的字段 如果blank=TRUE代表可以为空 False:不可以为空
48.要获取该字段二元组中相对应的第二个值,使用 get_FOO_display() 方法
from django.db import models
class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'
49.列出字段的值的列表
from django.db import models
class Fruit(models.Model):
name = models.CharField(max_length=100, primary_key=True)
>>> fruit = Fruit.objects.create(name='Apple')
>>> fruit.name = 'Pear'
>>> fruit.save()
>>> Fruit.objects.values_list('name', flat=True)
50.更新 ManyToManyField 字段有点不同——在字段上使用 add() 方法为关联关系添加一条记录。本例将 Author 实例 joe 添加至 entry 对象:
from blog.models import Author
joe = Author.objects.create(name=“Joe”)
entry.authors.add(joe)
51.http://www.liujiangblog.com/course/django/98 Django中 manytomany用法