60-Django基础

1、Web框架 

1.1 web框架的本质即socket服务端与浏览器的通信

    1. 收发socket消息 --> 按照HTTP协议消息格式去解析消息
    2. 路径和要执行的函数的对应关系 --> 主要的业务逻辑
    3. 字符串替换 --> 模板(特殊符号 --> 数据)

1.2 一个完整的请求流程

    1. 启动服务端,等待客户端(用户的浏览器)来连接
    2. 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求
    3. 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数
    4. 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容
    5. 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应)
    6. 浏览器收到响应的消息之后,按照HTML的规则渲染页面.
    7. 关闭连接

1.3 socket服务端功能划分

    1. 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...
    2. 根据用户访问不同的路径执行不同的函数
    3. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)

1.4 HTTP协议消息的格式    

 

 

 

1. 请求(request)  ---> 浏览器端的请求
  请求方法 路径 HTTP/1.1\r\n
  k1:v1\r\n
  ...\r\n
  \r\n
  请求体 <-- 可以有,可以没有

 

2. 响应(response)  ---> 服务器端的响应
  HTTP/1.1 状态码 状态描述符\r\n
  k1:v1\r\n
  Content-Type: text/html; charset=utf8\r\n
  \r\n
  响应正文 <-- HTML内容

1.5 关于GET和POST请求   

    GET请求和POST请求都属于HTTP协议规定的请求方法。

    • GET请求携带的数据都拼接在了URL上,且GET请求携带的数据有长度限制为40K。
    • 而POST请求通过form表单将数据提交至后台。   

1. 什么时候用GET请求?
  1. 浏览器想要得到一个HTML页面的时候
  2. 搜索引擎查询关键字的时候,例如www.sogo.com/web/?query=迪丽热巴
2. 什么时候用POST?
  浏览器向服务器提交数据,比如登录、注册、上传文件等

3. 实际中GET和POST的应用场景
1. GET:
  1. 直接在浏览器地址栏输入URL访问网站
  2. a标签
2. POST:
  1. 登录注册
  2. 修改(新增)大段的数据
  3. 上传文件

1.6 Python中 Web框架的分类

1.按上面三个功能划分:

    1. 框架自带a,b,c --> Tornado
    2. 框架自带b和c,使用第三方的a --> Django
    3. 框架自带b,使用第三方的a和c --> Flask

2. 按另一个维度来划分:

    1. Django --> 大而全(你做一个网站能用到的它都有)
    2. 其他 --> Flask 轻量级

2、什么是Django?

  Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它们各自的职责如下:

层次
职责
模型(Model),即数据存取层
处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即业务逻辑层
处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
视图(View),即表现层
存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

3、安装Django和创建工程

 3.1 安装Django

  pip3 install django==1.11.11  ---> 指定要按安装的版本

  pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11  ---> 指定源和版本安装

      pip3 install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com django==1.11.11   ---> 源为http时

 3.2 创建Django工程项目

  到你要保存Django项目的目录下执行 django-admin startproject 工程名

 3.3 创建Django app

  django-admin startapp app名

 3.4 启动Django服务    

在项目的根目录下(也就是有manage.py的那个目录),运行:

  • python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
  • python3 manage.py runserver 端口 --> 在指定的端口启动
  • python3 manage.py runserver --> 默认在本机的8000端口启动

    3.5 配置相关

1. Templates(存放HTML文件的配置)   <--  告诉Django去哪儿找我的HTML文件

2. 创建静态文件文件夹(一般命名为static,存放css/js/图片等)
在settings.py下的STATIC_URL = '/static/' 代表静态文件保存目录的别名,引用时就是引用此名字而不是存放html文件的文件夹名字!

同时新增如下:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]  # 静态文件的真实路径

  3. 注释掉setting.py中 带有 csrf 的那一行

  4. 配置APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'app02.apps.App02Config',
    'app03.apps.App03Config',
    ...,
]  # 在这里增加APP的关联关系

  5. 修改数据库连接配置(以mysql为例)

    1. 在setting.py文件下的修改如下: 

 1 DATABASES = {
 2     'default': {
 3         'ENGINE': 'django.db.backends.mysql',  # 数据库引擎(这里使用mysql)
 4         "NAME": "djangoapp01",  # 数据库
 5         'HOST': "127.0.0.1",  # IP地址
 6         "PORT": 3306,  # 端口号
 7         "USER": "root",  # 用户名
 8         "PASSWORD": "mysql123",  # 密码
 9     }
10 }

    2. 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库,在项目同名的文件夹下的/__init__.py文件中(不是app的/__init__.py文件!),写下面两句:

import pymysql
pymysql.install_as_MySQLdb()

4、操作数据库

4.1 Django中ORM与数据库的对应关系    

类    ---> 数据表
对象 ---> 数据行
属性 ---> 字段

  

4.2 创建数据表

  ORM只能操作数据表和数据行,不能操作数据库,数据库必须要手工创建。

  1、在app/models.py里面定义类,类名即表名。

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)  # 自增的ID主键
    name = models.CharField(max_length=64, null=False, unique=True)  # 创建一个varchar(64)的唯一的不为空的字段

  2、将数据update至数据库中

1. python3 manage.py makemigrations --> 把models.py里面的更改记录至app下的migrations下的.py文件
2. python3 manage.py migrate --> 把更改翻译成SQL语句,去数据库执行

    

  

  

posted @ 2018-07-19 15:40  Druid_Py  阅读(254)  评论(0编辑  收藏  举报