开始玩耍Django
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVT的框架模式;最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件
框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的
django安装
pip install django==2.0.4(版本号)
pip install django默认安装最新版本
创建项目
django-admin startproject myproject
开启开发服务器
cd myproject:进入项目目录
python manage.py runserver:开启服务
python manage.py runserver 7000:改变服务监听端口
python manage.py runserver 0:8000:改变服务监听IP:端口
markdown
语法百度搜索:马克飞象
print('hello world')
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:跨站请求伪造
{% csrf_token %}
提交
获取表单结果,通过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
渲染前台页面
{% csrf_token %}
用户名:
密码:
10个vue项目都可以启动
Vue
node.js:前端的后端语言
哥斯拉js,reactjs,vue.js
安装node.js
安装node.js
配置环境变量
确保CMD窗口下可用npm命令
npm install -g cnpm --registry=https://registry.npm.taobao.org
配置CNPM
cnpm config set cache "C:\nodejs\node_cache"
cnpm config set prefix "C:\nodejs\node_global"
创建项目
vue init webpack pronname
进入到项目目录
cd proname
安装依赖
cnpm install
开启服务
cnpm run dev
### admin控制台
> `admin`控制台是`django`为我们提供的一个非常便捷的用来管理数据库的界面
>
> 在主控路由文件下,其实你已经看到了它对应的路由设置:`path('admin/', admin.site.urls),`
> 进入`admin`界面,初次访问连接:`127.0.0.1/admin`,会提示我们输入账号密码,这是因为`django`的`admin`界面是需要一个超级管理员来登陆访问的,所以还需要我们创建对应的`admin`界面下的超级用户
- 创建`admin`超级用户,使用`manage.py`命令行工具执行如下命令
python manage.py createsuperuser
Username (leave blank to use ‘lienze’): rootEmail address:Password:Password (again):This password is too short. It must contain at least 8 characters.This password is too common.This password is entirely numeric.Password:Password (again):This password is too common.This password is entirely numeric.Password:Password (again):Superuser created successfully.
> 以上是我们创建超级用户的过程,非常坎坷;
>
> 可以看到,在输入太短(不满足8位),或是只包含数字的简单密码,超级用户的创建都是被拒绝的
>
> 所以我们把用户账号创建为`root`,而密码创建为`a1234567`,
- 接下来开启测试服务器,并通过创建好的超级用户登陆访问,如果幸运的话,你已经可以看到后台的`admin`界面啦
> `admin`界面已经展示出了默认`django`所使用的两张表,用户表和组表,用来保存当前管理后台的用户以及对应权限分组,可以点入用户表查看其中我们刚创建的`root`。
### admin注册表
> 问题还是有的,虽然`admin`界面已经可以登入,但是为什么看不到刚才创建的`Weather`表呢
>
> 这是因为默认的表创建之后,还需要通过对应app下的`admin.py`文件进行`admin`后台注册,只有注册在这个文件中的模型类对应的表才可以在`admin`界面所看到
- 在app下的admin.py文件中进行模型类的注册
#myapp/admin.pyfrom django.contrib import adminfrom myapp import modelsadmin.site.register(models.Weather)#使用register函数接收模型类作为参数即可完成注册
> 注册成功之后,在服务器,通过浏览器访问`admin`界面,就可以看到创建好的`Weather`表了
- 鼠标点击进去之后,就可以看到对应的表数据界面;右上角提供了可以添加功能的选项,试试给这个表来一些数据吧,这里我们添加了三条数据
阴天,晴天,打雷了
标签:manage,admin,py,django,models,python,Django,初始