django初期
pip install django==2.0.4(版本号)
pip install django默认安装最新版本
创建项目
django-admin startproject myproject
1
开启开发服务器
cd myproject:进入项目目录
python manage.py runserver:开启服务
python manage.py runserver 7000:改变服务监听端口
python manage.py runserver 0:8000:改变服务监听IP:端口
markdown
语法百度搜索:马克飞象
print('hello world')
1
django:音乐家的名字:优雅,新闻网站
Django
Django的数据库
sqllite3:django自带的,专门为初学者准备的
mysql:索引、引擎、事务(一致性,原子性、持久性、隔离性)
手动实现HTTP服务端
套接字:socket
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('',8000))
# 绑定可用端口IP
s.listen(5)
# 开启监听
with open('1.html','r', encoding='utf-8') as fp:
html_data = fp.read()
while 1:
c,c_addr = s.accept()
# 长连接:一直在连接状态
# 短链接:接收到请求,完成任务,即断开
# 一个request 返回一个reponse就断开了
data = c.recv(1024)
print(data.decode('utf-8'))
# data -> Connection -> keep-alive
html = "HTTP/1.1 200 OK\r\n" + \
"Server: bfe/1.0.8.18\r\n" + \
"Content-Type: text/html\r\n" + \
"\r\n" + \
html_data
c.send(html.encode('utf-8'))
c.close()
HTTP协议三次握手
a(192.168.1.203) -> SYN a = 1 -> b(192.168.1.20)
b -> ACK b = a + 1 -> a TIME_WAIT # 设置为更短的
# SYN泛洪攻击 DDOS
a -> ACK a = b + 1 -> b 连接建立
65535
Scapy 包 可以封装TCP数据包
标志位:
SYN:连接发起
ACK:请求响应
FIN:连接断开
TCP泛洪及DDOS
Django命令
开启django项目:django-admin startproject proname
开启子APP:python manage.py startapp app1
开启测试服务器:python manage.py runserver
承载压力极低,200-500之间,调试和访问信息输出,自动检测代码变更,并重新启动
tornado默认并不会这样
Django目录结构
- settings.py:整个项目的配置
- urls.py:项目的主路由文件
- wsgi.py:服务器协议文件,接管APP
- manage.py:
APP目录结构
app1
migrations: 保存迁移记录
__init__.py: 声明当前文件夹为一个包
admin.py:admin后台界面管理工具文件
app.py: app单元文件
test.py: 单元测试驱动的
models.py: 编写ORM
views.py: 视图文件
Django模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
创建项目目录下任意目录
配置与以上项中: 'DIRS': [],选项
静态资源:img,js,css,video
防盗链:
盗链行为:节约流量,流量费用()
settings.py配置:
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
# static-> 静态资源目录
表单提交
CSRF:跨站请求伪造
<form action="/register/" method="POST">
{% csrf_token %}
<input type='text' name='account'>
<input type='text' name='password'>
<button type="submit">提交</button>
</form>
获取表单结果,通过name值做key构造的QueryDict值
def register(request):
account = request.POST.get('account')
password = request.POST.get('password')
ORM映射
对象关系型映射
SQLite3
mysql
oracle
postgersql
ORM对于原生的SQL效率不高,Django的ORM一直是被认为比较差劲的
开发效率高,开发者省事
一个表代表orm中的一个类
表中的一个字段 代表 类中的一条变量属性
ORM映射关系类必须继承自models.Model基类
class User(models.Model):
# 模型类 orm映射类
account = models.CharField(max_length=50)
password = models.CharField(max_length=50)
查找迁移文件
python manage.py makemigrations
迁移数据库
python manage.py migrate
Admin界面
管理ORM映射表的一套系统
具有操作数据库的权限,这个地方的用户密码是绝对安全
创建admin后台超级用户
python
自己的ORM表如何在admin界面下被看到
from django.contrib import admin
from . import models
# Register your models here.
admin.site.register(models.User)
# 注册 models.User到admin界面,
ORM的DML语句
user = models.User.objects.get(account=account,password=password)
# get: 只能返回单条结果
响应式布局
bootstrap
bootmetro
常见行业关键词
QueryDict
Domain:一个域名中的最重要的部分
https://www.baidu.com/abc/?a=1#
https://: scheme
domain:www.baidu.com
/abc/:path
?a=1&b=1:Query
#:锚点符:在整个页面定位
Django
手动的写一个models类,实现一下简单的登陆注册
注册:怎么去创建数据 用ORM
注册步骤
注册子应用
在主应用里settings.py INSTALLED_APPS = [
注册子应用 ‘app’ #注册子应用
]
在子应用里的models.py文件里创表
class(models.model)
name = models.CharFieid(max_length=50)
password = models.CharFieid(max_length=255)
数据库迁移
在终端窗口里输入迁移命令:
python manage.py makemigrations #检测是否有更新的数据
python manage.py migrate #更新数据库的数据
配置到admin.py文件里
(1) from . import models
(2) admin.site.register(models.User)
注册后台管理员
python manage.py createsuperuser
渲染前台页面
<form method="post">
{% csrf_token %}
用户名:<input name="name">
密码:<input name="passwd" type="password">
<button type="submit"></button>
</form>