zoukankan      html  css  js  c++  java
  • Django基础

    Django框架简介

    MVC框架和MTV框架

    MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

    想要更详细的了解MVC模式? :>>点我

    Django的MTV模式

           Model(模型):负责业务对象与数据库的对象(ORM)

           Template(模版):负责如何把页面展示给用户

           View(视图):负责业务逻辑,并在适当的时候调用Model和Template

    此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

    Django框架图示

    HTTP 知识补充

    HTTP协议消息的格式

    1. 请求(request)
            请求方法 路径 HTTP/1.1
    
            k1:v1
    
            ...
    
            
    
            请求体        <-- 可以有,可以没有
    
    2. 响应(response)
            HTTP/1.1 状态码 状态描述符
    
            k1:v1
    
            Content-Type: text/html; charset=utf8
    
            
    
            响应正文       <-- HTML内容

    Python web框架的本质

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

    一个完整得请求流程

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

    Django知识

    安装

    1. Django版本 1.11.xx
    2. 安装方式
        1. 命令行        --> Python环境(双版本,pip的使用)
            pip3 install django==1.11.11
            pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11
        2. PyCharm安装

    Django项目启动

    1. 命令行启动
        在项目的根目录下(也就是有manage.py的那个目录),运行:
        python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
        python3 manage.py runserver 端口   --> 在指定的端口启动
        python3 manage.py runserver        --> 默认在本机的8000端口启动
    2. PyCharm启动
        点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)

    创建Django项目

    1. 创建方式
        1. 命令行创建方式
            1. cd到你要保存Django项目的目录
            2. Django-admin startproject 项目名   --> 会在当前目录创建Django项目
            3. django-admin startproject mysite
        2. PyCharm创建方式
            1. File --> new project --> ...
            2. 创建完之后一定要选在新窗口打开!!!
            3. File --> New project --> 左侧选Django --> 右侧填项目路径,并且勾选python.exe

    配置Django项目 项目名/settings.py文件

    1. settings.py文件
        1. templates文件夹的位置
        2. Templates(存放HTML文件的配置)       <-- 告诉Django去哪儿找我的HTML文件
    
    2. 静态文件(css/js/图片)
                1. STATIC_URL         --> 静态文件夹的别名(在HTML文件中用的)
                2. STATICFILES_DIRS   --> 静态文件夹的真正路径
                例如:
                # 静态文件保存目录的别名
                STATIC_URL = '/static/'
                # 所有静态文件(css/js/图片)都放在我下面你配置的文件夹中
                STATICFILES_DIRS = [
                    os.path.join(BASE_DIR, "static")
                ]
    
    3. 注释掉 csrf 相关的中间件
        #   'django.middleware.csrf.CsrfViewMiddleware',           # 默认在47行

    views.py

    1. 专门用来定义处理请求的函数
        1. 基本必备三件套
        from django.shortcuts import HttpResponse, render, redirect
            1. HttpResponse("要返回的内容")               --> 通常用于直接返回数据
            2. render(request, "html文件", {"k1": v1})   --> 返回一个HTML文件或者打开文件进行字符串替换
            3. redirect("URL")                          --> 告诉用户的浏览器去访问其他的URL
    
    2. request相关
            1. request.method     --> 查看请求的方法
            2. request.POST       --> 获取POST请求的数据

    ORM

    1. 什么是ORM? 
    是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.)
        import pymysql
        pymysql.connect(
         ...
         ...
        )
        1. 不同的程序员写的SQL水平参差不齐
        2. 执行效率也参差不齐
        python语法   --自动翻译-->  SQL语句
        jQuery                      DOM
        $("#d1")     --自动翻译-->  document.getElementById("d1")
    
        优点:
            1. 简单,不用自己写SQL语句
            2. 开发效率高
        缺点:
            1. 记忆你这个特殊的语法
            2. 相对于大神些的SQL语句,肯定执行效率有差距       
    
    2. ORM的本质(ORM的对应关系:):
        类    --->    数据表
        对象  --->    数据行
        属性  --->    字段
    
        按照规定的语法写,自动翻译成对应的SQL语句.
    
    3. ORM的功能:  
            1. 操作数据表    --> 创建表/删除表/修改表
            2. 操作数据行    --> 数据的增删改查

    使用Django的ORM详细步骤

    1. 手动创建数据库
        create database 数据库名;
    
    2. 在settings.py里面,配置数据库的连接信息
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',      # 连接的数据库类型
                'NAME': 'day62',                           # 数据库名称
                'HOST': '127.0.0.1',                       # 连接数据库的地址
                'PORT': 3306,                              # 端口
                'USER': 'root',                            # 用户名
                'PASSWORD': '123456',                      # 密码
            }
        }
    
    3. 在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库
        import pymysql
        pymysql.install_as_MySQLdb()
    
    4. 在app下面的models.py文件中定义一个类,这个类必须继承models.Model
        # 出版社
        class Publisher(models.Model):
        id = models.AutoField(primary_key=True)  # 自增的ID主键
        # 创建一个varchar(64)的唯一的不为空的字段
        name = models.CharField(max_length=64, null=False, unique=True)
    
    5. 执行两个命令(在项目的根目录(有manage.py文件的那个目录))
        1. python3 manage.py makemigrations   --> 把models.py里面的更改记录到小本本上
        2. python3 manage.py migrate          --> 把更改翻译成SQL语句,去数据库执行

     表和表之间的关系

    1、一对多(出版社和书)
    class Publisher(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=64)
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=64)
        # 外键(models.ForeignKey 一对多)
        publisher = models.ForeignKey(to="Publisher")
    
    2、多对多(作者和书)
    class Publisher(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=64)
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=64)
        # 外键(models.ForeignKey 一对多)
        publisher = models.ForeignKey(to="Publisher")
    
    class Author(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        # 外键(models.ManyToManyField 多对多)
        books = models.ManyToManyField(to="Book")

    GET 请求和 POST 请求

    1. GET请求和POST请求
        都属于HTTP协议规定的请求方法
    
    2. 什么时候用GET请求?
        1. 浏览器想要得到一个HTML页面的时候  
        2. 搜索引擎查询关键字的时候 (GET请求携带的数据都拼在了URL上)  www.sogo.com/web/?query=迪丽热巴
        3. GET请求携带的数据有长度限制 40k
    
    3. 什么时候用POST?
        1. 向后端提交数据(form表单提交数据)
            1. 大段的数据
            2. 包含隐私的数据
            3. 上传文件
    
    4. 实际中GET和POST的应用场景
        1. GET:
            1. 直接在浏览器地址栏输入URL访问网站
            2. 点击a标签
        2. POST:
            1. 登录注册
            2. 修改(新增)大段的数据
            3. 上传文件

    request相关的知识点

    1. request.method
        1. GET
        2. POST
    2. request.POST     ——> 所有和POST请求相关的数据
    3. request.GET      ——> 所有和GET请求相关的数据 
  • 相关阅读:
    解决Python错误-----SSL: CERTIFICATE_VERIFY_FAILED
    SpringBoot性能优化
    解决WARN:No URLs will be polled as dynamic configuration sources.
    浅析如何解决终端输入长命令不换行覆盖(Docker容器内输入长命令折行覆盖)问题:如何设置docker容器tty终端窗口大小-Linux stty命令设置串口终端行列数
    shell中的传递参数$0 / $n、shell运算符(算术/关系/布尔/字符串/文件测试)、echo 命令输出字符串、printf 命令输出格式化的字符串、test 命令检查某条件是否成立
    【转】Grafna学习随记
    【转】使用InfluxDB的连续查询解决聚合性能问题
    【转】TDengine踩坑随记(最后一次更新:2021-4-7 20:30)
    【转】tdengine的更新功能,呼声最高的数据更新功能来了,用户需要什么,我们就开源什么
    【转】Go mod常用与高级操作
  • 原文地址:https://www.cnblogs.com/yanjieli/p/9454090.html
Copyright © 2011-2022 走看看