python_18(Django基础)

摘要:
LPOST将数据提交到指定的资源,并请求服务器进行处理。数据包含在请求文本中。此请求可以创建新资源或修改现有资源,或者两者都有1.5个HTTP工作元素

第1章 web框架的本质
1.1 socket
1.2 空格后面是主体内容
1.3 HTTP协议
1.3.1 响应流程
1.4 HTTP请求方法
1.5 HTTP工作原理
1.6 URL
1.7 HTTP请求格式
1.8 HTTP响应格式
1.9 根据不同的路径返回不同内容
1.10 进阶版
1.11 根据访问的路径返回不同的动态页面
第2章 Django安装创建
2.1 部署安装
2.1.1 下载
2.2 命令行创建项目
2.2.1 djangoadmin
2.2.2 添加环境变量
2.2.3 创建命令
2.3 pycharm 形式创建项目
2.4 命令行启动项目
2.4.1 关闭
2.5 创建app
2.5.1 目录结构
2.6 注册APP
2.7 第一个index
第3章 函数规范
3.1.1 app.views.py:
3.1.2 untitled3.urls.py
3.1.3 disable cache
3.2 静态文件
3.2.1 别名
第4章 模板(未完待续)
4.1 创建templates目录
4.2 修改settings文件
4.3 render模块
4.4 特殊符号{{}}
4.4.1 变量
第5章 路由系统(未完待续)
5.1 基本格式
5.2 urls.py
5.3 参数说明
5.4 区别django2.0
5.5 注意事项
5.6 补充说明
第6章 settings介绍(未完待续)
6.1 目录介绍
6.2 模板配置
6.3 静态文件配置
6.4 中间件配置
第7章 Django视图函数
7.1 基础必备三件套:
7.2 HttpResponse
7.3 render
7.4 redirect
7.5 request
7.5.1 path_info
7.6 request.method
7.6.1 request.POST.get
7.6.2 request.GET
第8章 ORM数据库链接
8.1 创建数据库
8.2 配置settings
8.3 配置pymysql
8.4 配置models.py
8.5 执行数据库迁移的命令
8.6 ORM操作
8.6.1 查询
8.6.2 增加
8.6.3 删除
8.6.4 修改

第1章 web框架的本质

1.1 socket

基于最基本的socket演变而来

python_socket(代码)

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 import socket

sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b"ok")

    conn.close()

浏览器访问打印

b'GET / HTTP/1.1 Host: 127.0.0.1 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: zh-CN,zh;q=0.8 '

b'GET /favicon.ico HTTP/1.1 Host: 127.0.0.1 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 Accept: image/webp,image/*,*/*;q=0.8 Referer: http://127.0.0.1/ Accept-Encoding: gzip, deflate, sdch, br Accept-Language: zh-CN,zh;q=0.8 '

我们将 替换成换行看得更清晰点:

GET / HTTP/1.1 

Host: 127.0.0.1:8080 

Connection: keep-alive 

Cache-Control: max-age=0 

Upgrade-Insecure-Requests: 1 

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3355.4 Safari/537.36 

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 

Accept-Encoding: gzip, deflate, br 

Accept-Language: zh-CN,zh;q=0.9 

Cookie: csrftoken=CtHePYARJOKNx5oNVwxIteOJXpNyJ29L4bW4506YoVqFaIFFaHm0EWDZqKmw6Jm8 

  

访问知乎显示

 python_18(Django基础)第1张

1.2 空格后面是主体内容

import socket

 sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok Content-Type: text/html: charset=utf-8 ')

    conn.send('随便'.encode('utf-8'))

    conn.close()

sk.close()

浏览器输出

python_18(Django基础)第2张

1.3 HTTP协议

1.3.1 响应流程

在浏览器地址栏键入URL,按下回车之后会经历以下流程:

l  浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

l  解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

l  浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

l  服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

l  释放 TCP连接;

l  浏览器将该 html 文本并显示内容;  

1.4 HTTP请求方法

共有八种方法(也称“动作”)来以不同方式操作指定的资源,其中最常见的有两种:

l  GET

向指定的资源发出“显示”请求,使用GET方法应该只用在读取数据,而不应该被用于产生副作用的操作中,例如在web application中,其中一个原因是GET可能会被网络蜘蛛随意访问。

l  POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上环文件)。数据被包含在请求文本中,这个请求可能会创建新的资源或者修改现有资源,或者都有

1.5 HTTP工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

1.6 URL

超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:

l  传送协议。

l  层级URL标记符号(为[//],固定不变)

l  访问资源需要的凭证信息(可省略)

l  服务器。(通常为域名,有时为IP地址)

l  端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)

l  路径。(以“/”字符区别路径中的每一个目录名称)

l  查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)

l  片段。以“#”字符为起点

以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:

http,是协议;

www.luffycity.com,是服务器;

80,是服务器上的网络端口号;

/news/index.html,是路径;

?id=250&page=1,是查询。

大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。

1.7 HTTP请求格式

 python_18(Django基础)第3张

1.8 HTTP响应格式

 python_18(Django基础)第4张

1.9 根据不同的路径返回不同内容

import socket

 sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok Content-Type: text/html: charset=utf-8 ')

    url = data.decode('utf-8').split()[1]

    print(url)

    if url == '/oumei':

        conn.send('欧美'.encode('utf-8'))

    elif url == '/rihan':

        conn.send('日韩'.encode('utf-8'))

    else:

        conn.send('正在录制中'.encode('utf-8'))

    conn.close()

sk.close()

1.10 进阶版

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 import socket

def oumei(url):

    return '欧美{}'.format(url).encode('utf-8')

 def rihan(url):

    return '日韩{}'.format(url).encode('utf-8')

 

def  guochan(url):

    return '国产{}'.format(url).encode('utf-8')

 list = [

    ('/rihan',rihan),

    ('/oumei',oumei),

    ('/guochan',guochan),

]

 sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 

while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok Content-Type: text/html: charset=utf-8 ')

    url = data.decode('utf-8').split()[1]

    print(url)

    func = None

 

    for i in list:

        if i[0] == url:

            func = i[1]

            break

    if func:

        ret = func(url)

    else:

        ret = '正在录制中'.encode('utf-8')

    conn.send(ret)

    conn.close()

 

sk.close()

1.11 根据访问的路径返回不同的动态页面

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

import socket

def index(url):

    import time

    with open('index.html','r',encoding='utf-8') as f:

        data = f.read()

        data = data.replace(@@xx@@,time.strftime("%Y-%m-%d %H:%M:%S"))

    return data.encode('utf-8')

 

def oumei(url):

    return '欧美{}'.format(url).encode('utf-8')

def rihan(url):

    return '日韩{}'.format(url).encode('utf-8')

 

def  guochan(url):

    return '国产{}'.format(url).encode('utf-8')

 

list = [

    ('/rihan',rihan),

    ('/oumei',oumei),

    ('/guochan',guochan),

]

 

sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 

while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok Content-Type: text/html: charset=utf-8 ')

    url = data.decode('utf-8').split()[1]

    print(url)

    func = None

 

    for i in list:

        if i[0] == url:

            func = i[1]

            break

    if func:

        ret = func(url)

    else:

        ret = '正在录制中'.encode('utf-8')

    conn.send(ret)

    conn.close()

 

sk.close()

index.html(代码)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>首页</title>

</head>

<body>

<h1>澳门首家皇家赌场上线啦!!</h1>

@@xx@@

</body>

</html>

第2章 Django安装创建

2.1 部署安装

版本信息:1.11 目前只有1.11支持python2.7

python_18(Django基础)第5张

2.1.1 下载

命令行:

命令行:pip3 install django==1.11.15

查看命令:pip3 list

pycham下载

 python_18(Django基础)第6张

python_18(Django基础)第7张

2.2 命令行创建项目

2.2.1 djangoadmin

 python_18(Django基础)第8张

2.2.2 添加环境变量

 python_18(Django基础)第9张

2.2.3 创建命令

django-admin startproject 项目名

例:

django-admin startproject  s22

当前路径下创建的s22项目

 python_18(Django基础)第10张

2.3 pycharm 形式创建项目

python_18(Django基础)第11张

2.4 命令行启动项目

cd   C:UsersAdministrators22

python3 manage.py runserver

 python_18(Django基础)第12张

浏览器访问:

http://127.0.0.1:8000/

 python_18(Django基础)第13张

更改端口

python3 manage.py runserver 80

python3 manage.py runserver 127.0.0.1:9999

2.4.1 关闭

 python_18(Django基础)第14张

2.5 创建app

l  命令行创建

python manage.py startapp  app01

l  pycharm创建

 python_18(Django基础)第15张

python_18(Django基础)第16张

2.5.1 目录结构

admin -----管理后台

apps ----配置相关

models-----

views-------具体业务逻辑函数

 python_18(Django基础)第17张

2.6 注册APP

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'app01',

    'app02.apps.AppConfig' è 标准写法会自动读取app02下的py文件

]

2.7 第一个index

urls.py:

from django.conf.urls import url

from django.contrib import admin

from django.shortcuts import HttpResponse

 

def index(request):

    return HttpResponse('这是index页面')

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'index',index)

]

输出

 python_18(Django基础)第18张

第3章 函数规范

l  urls.py---------------------只记录地址url

l  app下的views.py-------写入函数代码

3.1.1 app.views.py:

from django.shortcuts import render

 

# Create your views here.

from django.shortcuts import HttpResponse

 

def index(request):

    return HttpResponse('<h1>这是index页面<h1>')

3.1.2 untitled3.urls.py

from django.contrib import admin

from app01 import views

 

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'index',views.index)

]

3.1.3 disable cache

解释:清除缓存影响

 python_18(Django基础)第19张

3.2 静态文件

settings.py

STATIC_URL = '/static999/' #别名

STATICFILES_DIRS=[

    os.path.join(BASE_DIR,'static')

]

注释;变量名不能错有两个s

3.2.1 别名

例:login.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>登录页面</title>

    <link rel="stylesheet" href="http://t.zoukankan.com/static999/bootstrap-3.3.7/css/bootstrap.css">

    <link rel="stylesheet" href="http://t.zoukankan.com/static/lgoin.css">

</head>

第4章 模板(未完待续)

4.1 创建templates目录

 python_18(Django基础)第20张

4.2 修改settings文件

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [os.path.join(BASE_DIR,'templates')],

        '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',

            ],

        },

    },

]

templates.index:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>首页</title>

</head>

<body>

<h1>这是index页面!!!!!</h1>

</body>

</html>

4.3 render模块

app.vivews

# Create your views here.

from django.shortcuts import HttpResponse,render

 

def index(request):

    # return HttpResponse('<h1>这是index页面<h1>')

    return render(request,'index.html')

4.4 特殊符号{{}}

{{}} 表示变量,在模板渲染的时候替换成值     

{% %}表示逻辑相关的操作

{%endfor%}

4.4.1 变量

{{ 变量名 }}

变量名由字母数字和下划线组成。

点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。

第5章 路由系统(未完待续)

URL配置(URLconf)就像Django所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。

5.1 基本格式

from django.conf.urls import url

 

urlpatterns = [

     url(正则表达式, views视图,参数,别名),

]

5.2 urls.py

从上往下进行匹配第一个参数是正则

示例

from django.conf.urls import url

from django.contrib import admin

from app01 import views

 

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'index',views.index)

]

示例:

from django.conf.urls import url

from . import views

urlpatterns = [

    url(r'^articles/2003/$', views.special_case_2003),

    url(r'^articles/([0-9]{4})/$', views.year_archive),

    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),

    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),

]

5.3 参数说明

l  正则表达式:一个正则表达式字符串

l  views视图:一个可调用对象,通常为一个视图函数

l  参数:可选的要传递给视图函数的默认参数(字典形式)

l  别名:一个可选的name参数

5.4 区别django2.0

from django.urls import path,re_path

 

urlpatterns = [

    path('articles/2003/', views.special_case_2003),

    path('articles/<int:year>/', views.year_archive),

    path('articles/<int:year>/<int:month>/', views.month_archive),

    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),

]

5.5 注意事项

l  urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。

l  若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。

l  不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。

l  每个正则表达式前面的'r' 是可选的但是建议加上。

5.6 补充说明

是否开启URL访问地址后面不为/跳转至带有/的路径的配置项

APPEND_SLASH=True

Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。

其效果就是:

我们定义了urls.py:

 

from django.conf.urls import url

from app01 import views

 

urlpatterns = [

    url(r'^blog/$', views.blog),

]

访问 http://www.example.com/blog 时,默认将网址自动转换为 http://www.example/com/blog/ 。

如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 http://www.example.com/blog 时就会提示找不到页面。

第6章 settings介绍(未完待续)

6.1 目录介绍

mysite/

├── manage.py  # 管理文件

└── mysite  # 项目目录

    ├── __init__.py

    ├── settings.py  # 配置

    ├── urls.py  # 路由 --> URL和函数的对应关系

    └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server

6.2 模板配置

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [os.path.join(BASE_DIR, "template")],  # template文件夹位置

        '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',

            ],

        },

    },

]

6.3 静态文件配置

STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, "static"),  # 静态文件存放位置

]

6.4 中间件配置

说明:刚开始学习时可在配置文件中暂时禁用csrf中间件,方便表单提交测试。

MIDDLEWARE = [

    'django.middleware.security.SecurityMiddleware',

    'django.contrib.sessions.middleware.SessionMiddleware',

    'django.middleware.common.CommonMiddleware',

    # 'django.middleware.csrf.CsrfViewMiddleware',

    'django.contrib.auth.middleware.AuthenticationMiddleware',

    'django.contrib.messages.middleware.MessageMiddleware',

    'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

第7章 Django视图函数

7.1 基础必备三件套:

              1. HttpResponse('home')                   —— 返回一个字符串

              2. render(request,'index.html')     —— 返回一个具体的页面(tenplates写好的)

              3. redirect(跳转的URL)                       ——重定向  响应头 location:'跳转的地址'

from django.shortcuts import HttpResponse, render, redirect

7.2 HttpResponse

解释:内部传入一个字符串参数,返回给浏览器。

例如:

def index(request):

    # 业务逻辑代码

    return HttpResponse("OK")

7.3 render

除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。

将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)

例如:

def index(request):

    # 业务逻辑代码

    return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})

7.4 redirect

接受一个URL参数,表示跳转到指定的URL。

例如:

def index(request):

    # 业务逻辑代码

    return redirect("/home/")

注释:

l  /home/ 加/表示从根开始跳转: url 127.0.0.1:8000/home

l  home/表示在原有url上拼接: 127.0.0.1:8000/index/home

l  可以接完整url

       return redirect("http://www.baidu.com")

7.5 request

       request.path_info              ——》URL路径

       request.method              ——》请求方式

       request.POST            ——》POST提交的数据  { }

       request.GET             ——》URL上的参数   /login/?username=alex&passwor=123

             

7.5.1 path_info

获取url访问路径

appo1.views.py

def index(request):

    print(request.path_info)

    return HttpResponse('<h1>这是管理页面<h1>')

输出:

/index/

[20/Sep/2018 14:01:37] "GET /index/ HTTP/1.1" 200 27

7.6 request.method

解释:获取请求方式

7.6.1 request.POST.get

例:获取用户输入POST信息

app01.views.py

#定义登录页面

def login(request):

    if request.method == 'POST':

        print(request.POST)

        username = request.POST.get('username','') è get获取字典值不报错,并定义返回值 ‘ ’为空

        password = request.POST.get('password','')

        if username == 'lili' and password == '123456':

            return HttpResponse('登录成功')

        else:

            return HttpResponse('登录失败')

    return render(request, 'login.html')

输出

[20/Sep/2018 14:44:12] "POST /login/ HTTP/1.1" 200 12

<QueryDict: {'username': ['wang'], 'password': ['123']}>

7.6.2 request.GET

第8章 ORM数据库链接

8.1 创建数据库

create database django1

8.2 配置settings

# Database

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.sqlite3',

        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

    }

}

改为

# Database

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

 

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',èè支持的数据库类型

        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

        'NAME': 'django2',

        'USER': 'root',

        'PASSWORD': '',

        'HOST': '127.0.0.1',

        'PORT': 3306,

    }

}

 

8.3 配置pymysql

在项目同名的文件夹下的__init__.py中写代码:

                    import pymysql

                    pymysql.install_as_MySQLdb()

8.4 配置models.py

在app下的models.py中写类:

                    class Publisher(models.Model):

                        nid = models.AutoField(primary_key=True)

                        name = models.CharField(max_length=16)

8.5 执行数据库迁移的命令

python manage.py makemigrations    # 保存APP下的models.py的变更记录

pyhton manage.py migrate           # 将变更记录同步到数据库中

注意:指定app 默认所有注册的app根据modle 来记录来配置数据库记录资源

python manage.py makemigrations app01 针对app01做数据变更迁移 默认是setting登记过的

8.6 ORM操作

8.6.1 查询

获取所有数据

models.Publisher.objects.all()      —— 》 queryset  对象列表

获取满足条件的所有数据数据

models.Publisher.objects.filter(name='xxx')  —— 》 queryset  对象列表

排序

models.Publisher.objects.all().order_by('id')   —— 》 queryset  对象列表  升序

models.Publisher.objects.all().order_by('-id')   —— 》 queryset  对象列表  降序序

获取一个对象

models.Publisher.objects.get(nid=1)

       # 获取不到或者获取多个就报错

8.6.2 增加

models.Publisher.objects.create(name='xxxxx')   —— 》成功插入的对象

8.6.3 删除

models.Publisher.objects.filter(nid=nid).delete()  ——》 删除满足条件的所有对象

models.Publisher.objects.get(nid=nid).delete()     ——》 删除对应的对象

8.6.4 修改

    pub_obj = models.Publisher.objects.get(nid=nid)

                pub_obj.name = 'xxxx'

                pub_obj.save()  # 写入数据库

免责声明:文章转载自《python_18(Django基础)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)ELK从5.6.3升级到6.3.0总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

为什么一个Http Header中的空格会被骇客利用

导读:本文通过一个Netty的一个issue来学习什么是"http request smuggling"、它产生的原因与解决方法,从而对http协议有进一步了解。 前言 前阵子在Netty的issue里有人提了一个问题 http request smuggling, cause by obfuscating TE header,描述了一个Netty的...

一次SQLServer数据库宕机问题

数据库采用SQL Server 2005版本, 数据库文件约为6G,而LDF日志文件已经高达36G。 服务器开始变的不太稳定 。数据没有成功保存。 打开事件查看器发现很多信息日志 数据库 '' 中的文件 '_log' 的自动增长已由用户取消,或已在 30031 毫秒后超时。请使用 ALTER DATABASE 为此文件设置较小的 FILEGROWTH 值...

MariaDB日志文件、备份与恢复

1. 数据库的6种日志        数据库有6种日志,分别是:查询日志、慢查询日志、错误日志、二进制日志、中继日志以及事务日志。 1> 查询日志   查询日志记录每一条sql语句,建议不开启,因为如果访问量较大,会占用相当大的资源,影响性能。 查询日志的开启:        编辑配置文件:/etc/my.cnf.d/server.cnf vim /...

dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

自从操作系统升级到64位以后,就要不断的需要面对32位、64位的问题。相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别。同时,对于程序的dll文件应该放到System32文件夹,还是SysWow64,大部分人做的决定是,32位程序放到System32,64位程序放到SysWo...

SQL Serever学习4

SQL Server系统中数据库相关概念 在SQLServer数据库系统中分为2大类,系统数据库和用户数据库。 SQLServer安装后系统会自动生成4个系统数据库,他们是Master,Model,Msdb,Tempdb,系统数据库至少有2个文件组成,一个是扩展名为.mdf的数据库文件,一个是扩展名为.ldf的事务日志文件,他们存储在SQLServer默认...

RMAN备份与恢复深入解&amp;lt;一&amp;gt;

一数据库版本 SQL> select *from v$version; BANNER ---------------------------------------------------------------- OracleDatabase 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/S...