你猜Django能干什么?

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': [],选项

Django返回Response

  • form django.http import HttpResponse

HttpResponse:返回HTML字符串

  • from django.shortscuts import render

render:返回并渲染模板目录下的对应模板文件,处理模板变量

<!-- 模板变量 -->
{{ message }}
def Index(request):
    message = 'abc'
    return render(request,'1.html',locals()) # 局部变量全部返回
	return render(request,'1.html',{'message':'abc'}) # 单独返回

Django静态资源

  • 静态资源: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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值