• 四十一、django框架简介


    一 python主流框架

    1. django: 大而全,自带的功能非常的多,但是有时候会略显笨重,类似于’航空母舰’。
    2. flask:小而精,自带的功能非常的少,但是第三方模块非常的多,类似于’游骑兵’。
    3. tornado:异步非阻塞框架,速度极快,甚至可以用于充当游戏服务器。
    4. 还有一些占比较小,但是也很厉害的框架:fastapi、sanic…

    django版本:
    django3.X:自带异步功能
    django2.X:默认不支持异步
    django1.X:默认不支持异步
    在这里插入图片描述

    在这里插入图片描述

    二 django基本操作命令

    1. 获取django版本
    py -m django --version
    
    • 1
    1. 创建项目
      打开命令行,cd到想要创建的目录下,然后运行下边代码
    django-admin startproject mysite
    
    • 1
    1. 创建app
      切到创建的项目目录下
    python manage.py startapp polls
    
    • 1
    1. 启动项目
      切到创建的项目目录下
    python manage.py runserver
    
    • 1

    三 命令行与pycharm的区别

    1. 命令行不会自动创建templates文件夹
    2. 命令行不会在配置文件编写关于templates文件夹的配置
      ‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]
    3. pycharm自动创建的第一个应用会自动注册到配置文件中
    4. 针对db.sqlite3文件不用去在乎它有没有创建 只要运行了django会自动出来

    四 django目录结构

    -mysite文件夹名称
    
      --mysite同名文件夹
    
        ----settings.py        项目配置文件
    
        ----urls.py          总路由层
    
      --manage.py           项目入口文件
    
      --db.sqlite3             运行项目后自动创建(django自带的小型数据库)
      
      --templates文件夹                            存储HTML文件
    
      --应用文件夹           通过命令创建(可以创建任意个数)
    
        ----migrations文件夹     存储数据迁移记录
    
        ----admin.py         django提供的后台管理
    
        ----apps.py          用于配置文件的应用注册(创建的应用都需要去配置文件中注册)
    
        ----models.py         模型层(与数据库相关)
    
        ----views.py          视图层(编写当前应用核心业务逻辑代码)
    
        ----tests.py           自带的测试文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    urls.py 路由层
    views.py 视图层
    templates 模板层
    models.py 模型层

    五 django三板斧

    from django.shortcuts import render, HttpResponse, redirect
    
    
    # Create your views here.
    
    def get_info(request):
        import pymysql
        conn = pymysql.connect(
            user='root',
            password='',
            port=3306,
            host='127.0.0.1',
            database='day55',
            autocommit=True,
            charset='utf8'
        )
        cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
        sql = 'SELECT * FROM user_info'
        cur.execute(sql)
        res = cur.fetchall()
        # 返回HTML页面
        return render(request, 'user_info.html', {'user_info': res})
    	
    
    def login(request):
        return HttpResponse('login')  # 返回字符串
    
    
    def index(request):
        return redirect('HTTPS://www.baidu.com')  # 重定向
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    六 静态文件及相关配置

    静态文件就是HTML页面上不经常改变的资源。

    1. 第三方框架文件
    2. css文件
    3. js文件
    4. 图片文件

    针对静态文件资源一般都会放在static文件夹内,当static文件夹有很多不同类型的文件,也可以进行分类。

    针对静态文件的访问需要提前开设相应的接口
    在项目同名文件夹下的settings.py中添加配置。

    STATIC_URL = 'static/'  # 接口前缀
    
    STATICFILES_DIR = [
    	os.path.join(BASE_DIR, 'static')
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    动态解析

    {% load static %}
        <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
        <script src="{% static 'bootstrap-3.4.1-dist/bootstrap-3.4.1-dist/js/bootstrap.min.js' %}">script>
    
    • 1
    • 2
    • 3

    七 请求方式

    GET请求:获取资源,也可以携带数据,以问号开始,什么等于什么的格式,多个数据用&隔开。数据只能是一些无关紧要的数据,大小一般是2~4k。GET请求没有请求体。

    POST请求:提交数据,数据都是放在请求体中,数据大小没有限制。

    from表单中的默认请求方式是GET请求,可以修改method参数:method=‘post’ 。

    from表单中的action参数是控制数据提交的地址

    1. 不填,朝当前页面提交。
    2. 写后缀,自动补全ip和port
    3. 写全称,提交至参数网页。

    注意:在django中提交post请求要在settings中的中间件中注释一行代码,不然会报错。

    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',
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    八 request方法

    GET
    	request.method  返回请求方式,纯大写字符串
    	request.GET  返回类似是一个列表套字典类型
    	request.GET.get(key)  获取字典key对应的列表最后一个值
    	request.GET.getlist(key)  获取字典key对应的列表
    
    POST
    	request.POST
    	request.POST.get(key)
    	request.POST.getliast(key)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    九 pycharm连接MySQL

    在这里插入图片描述
    在这里插入图片描述

    十 django连接MySQL

    django默认数据库是sqlite3,想要连接数据库需要修改settings.py中的数据库相关配置。

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day56',
            'USER': 'root',
            'PASSWORD': '',
            'POST': 3306,
            'HOST': '127.0.0.1',
            'CHARSET': 'utf8'
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意:需要在项目或应用下的上下init中添加下边代码。

    import pymysql
    pymql.install_as_MySALdb
    
    • 1
    • 2

    如果还是报错,就安装mysqlclient模块即可。

    十一 ORM

    ORM(Object Relational Mapping):对象关系映射,目的是使用python语法简单快捷的操作MySQL。

    11.1 创建表

    应用目录下的models.py中编写模型类

    from django.db import models
    
    
    # Create your models here.
    class Test(models.Model):  # 类似定义表名
        id = models.AutoField(primary_key=True)  # 类似于定义了主键
        name = models.CharField(max_length=32)  # 定义普通字段
        password = models.BigIntegerField()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    11.2 数据库迁移命令

    1. 将models中有关数据可的操作记录下来(migrations文件夹中)
    python manage.py makemigrations
    
    • 1
    1. 将数据真正的同步到数据库中
    python manage.py migrate
    
    • 1

    当修改了models中与数据库相关的代码,都必须执行上边两行命令。

    注意:使用ORM创建表时,可以不用创建主键id,ORM会自动创建。

    11.3 ORM语法

    models.User.objects.filter(username='jasper').first()
    
    • 1
    modeles.User.objects.create()
    
    • 1
    models.User.objects.filter().update()
    
    • 1
    models.User.object.filter().delete()
    
    • 1

    11.4 ORM外键关联

    from django.db import models
    
    
    # Create your models here.
    class Book(models.Model):
        name = models.CharField(max_length=32)
        # 书籍表和出版社表建立一对多关系 外键字段建立在多的一方
        publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)
    
    
    class Publish(models.Model):
        name = models.CharField(max_length=32)
        # 出版社和作者之间是多对多 外键建立在任意一方
        auth = models.ManyToManyField(to='Auth')
    
    
    class Auth(models.Model):
        name = models.CharField(max_length=32)
        # 作者与作者信息表是一对一关系 外键字段建立在查询频率多的一方
        auth_info = models.OneToOneField(to='AuthInfo', on_delete=models.CASCADE)
    
    
    class AuthInfo(models.Model):
        addr = models.CharField(max_length=32)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    图像识别技术在工业自动化领域的应用与实现
    课程设计书五子棋AI算法及其实现
    抄写Linux源码(Day13:从 MBR 到 C main 函数 (2:研究 setup.s) )
    用合成数据训练车辆姿态估计神经网络
    玩转TypeScript之玩转数组(完整版)
    Python之Excel数据相关
    Pandas数据分析:处理文本数据(str/object)各类操作+代码一文详解(三)
    进制的转换 如六进制
    css_css3新特性
    接口测试——接口协议抓包分析与mock_L1
  • 原文地址:https://blog.csdn.net/weixin_68531269/article/details/126609568