• 本周内容整理


    内容概览

    • Django
      • 基本操作命令
      • 命令行与pycharm操作的区别
      • django必会三板斧
      • 静态文件及相关配置
      • request对象方法
      • 连接MySQL
      • orm
      • 路由层
      • 视图层
      • 模板层

    Django

    基本操作命令

    • cmd
      • 创建django项目
        django-admin startproject 项目名
      • 运行django项目
        python manage.py runserver ip:port
      • 创建app应用
        python manage.py startapp 应用名
    • pycharm
      鼠标点击创建

    命令行与pycharm操作的区别

    1. 命令行不会自动创建templates文件夹
    2. 命令行不会配置关于templates文件夹的配置
    3. pycharm自动创建的应用会自动注册到配置文件中

    django必会三板斧

    Httpresponse:直接返回字符创
    render:返回html页面,并且支持模板语法
    redirect:主要用于重定向

    静态文件及相关配置

    在项目目录下创建static文件夹
    配置文件中开设相应的接口

    STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'static')
        ]
    
    • 1
    • 2
    • 3

    request对象方法

    request.method				# 获取请求方式 结果是纯大写的字符串
    request.POST  				# 获取POST请求发送来的普通数据(不包含文件)
    	request.POST.get()     	# 默认只获取列表中最后一个数据值
      	request.POST.getlist()  # 获取键对应的整个列表 无论有几个数据值
    request.GET	   				# 获取url后面携带的非敏感数据
    	request.GET.get()     	# 默认只获取列表中最后一个数据值
      	request.GET.getlist()  	# 获取键对应的整个列表 无论有几个数据值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    连接MySQL

    • pycharm连接MySQL
    • django连接MySQL
      1. 现在配置文件中修改配置
      2. 指定连接MySQL的模块

    orm

    orm:对象关系映射;使用python的语法操作MySQL

    1. 先去应用目录下的models.py编写模型类
      class User(models.Model):  # 类似于定义了表名
          # id int primary key auto_increment
          id = models.AutoField(primary_key=True)  # 类似于定义了主键
          # name varchar(32)
          name = models.CharField(max_length=32)  # 类似于定义了普通字段
          # pwd int
          pwd = models.IntegerField()  # 类似于定义了普通字段
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    2. 数据库迁移命令
      1. python manage.py makemigretions
      2. python manage.py migrate
    orm语法
    1. 查:models.表名.object.filter()
    2. 增:models.表名.object.create()
    3. 改:models.表名.object.filter().update()
    4. 删:models.表名.object.filter().remove()
    orm外键
    • 一对多
      xxx = models.ForeignKey(to='绑定字段名',on_delete=models.CASCADE)
      
      • 1
    • 多对多
      xxx = models.ManyToManyField(to='绑定字段名')
      
      • 1
    • 一对一
      xxx = models.OneToOneField(to='绑定字段名',on_delete=models.CASCADE)
      
      • 1

    路由层

    路由匹配
    path('网址后缀', 函数名)  # 路由匹配上执行函数
    
    # path转换器:当网址后缀不固定时使用
    path('网址后缀/',函数名)
    
    # 正则匹配
    re_path('正则表达式', 函数名)  # 只要能够匹配上正则表达式就执行函数
    
    # 正则之无名分组
    re_path('正则表达式/(正则表达式)', 函数名)  # 正则表达式分组匹配到的内容会当做视图函数的位置参数传入
    
    # 正则之有名分组
    re_path('正则表达式/(?P<名字>正则表达式', 函数名)  # 正则表达式分组匹配到的内容会当做视图函数的关键字参数传入
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    反向解析

    给路由对应关系起别名

    path('网址后缀/', 视图函数, name='别名')
    
    • 1

    html页面

    {% url 'reg_view' %}
    
    • 1

    后端

    from django.shortcuts import reverse
    reverse('reg_view')
    
    • 1
    • 2
    无名有名反向解析

    当路由中有不确定的匹配因素,反向解析的时候需要提前给出一个具体的值

    reverse('别名', args=('值',))
    {% url '别名' '值' %}
    
    • 1
    • 2
    路由分发

    让每个应用都有自己的urls、templates文件夹、static文件夹
    总路由将请求分发给各自的应用

    # 总路由
    path('app01/', include('app01.urls'))
    # 子路由
    path('func/', views.func)
    
    • 1
    • 2
    • 3
    • 4
    名称空间

    有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析

    解决方式1
    	名称空间
    		namespace
    			path('app01/', include(('app01.urls', 'app01'), namespace='app01'))
    			path('app01/', include(('app01.urls', 'app02'), namespace='app02'))
    解决方式2
    	别名不冲突即可
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    视图层

    视图函数的返回值

    视图函数的返回值必须是一个Httpresponse对象

    视图函数返回json格式数据
    from django.http import JsonResponse
    def func(request):
    	d1 = [11, 22, 33]
    	return JsonResponse(func)
    
    • 1
    • 2
    • 3
    • 4
    form表单携带文件数据

    from表单method属性必须是post,enctype属性值必须是multipart/form-data
    后端获取数据:request.FILES

    FBV与CBV

    FBV:基于函数的视图
    CBV:基于类的视图

    模板层

    模板语法传值
    • 方式1:
      return render(request, 'html文件', {'name':name}
      
      • 1
    • 方式2:
      return render(request, 'html文件', locals()
      
      • 1
    模板语法过滤器

    类似于python的内置函数

    <p>统计长度:{{ s|length }}</p>
    <p>加法运算:{{ i|add:123 }}、加法运算:{{ s|add:'heiheihei' }}</p>
    <p>日期转换:{{ s|date:'Y-m-d H:i:s' }}</p>
    <p>文件大小:{{ file_size|filesizeformat }}</p>
    <p>数据切片:{{ l|slice:'0:10' }}</p>
    <p>字符截取(三个点算一个):{{ s1|truncatechars:6 }}</p>
    <p>单词截取(空格):{{ s1|truncatewords:6 }}</p>
    <p>语法转义:{{ script_tag|safe }}</p>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    模板语法标签

    类似于python流程控制

    
    {% if 条件 %}
    {% elif 条件 %}
    {% else %}
    {% endif %}
    
    {% for i in s %}
    {% endfor %}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    自定义标签函数、过滤器、inclusion_tag

    如果想自定义 必须先做以下三件事

    1. 在应用下创建一个名为templatetags文件夹
    2. 在该文件夹创建任意名称的py文件
    3. 在该py文件内编写自定义相关代码
      from django.template import Library
      register = Library()
     # 自定义过滤器
        @register.filter(name='myfilter')
        def my_add(a, b):
            return a + b
       	
        # 自定义标签函数
        @register.simple_tag(name='mt')
        def func(a, b, c, d):
            return a + b + c + d
       	
        # 自定义inclusion_tag
        @register.inclusion_tag(filename='it.html')
        def index(n):
            html = []
            for i in range(n):
                html.append('第%s页'%i)
            return locals()
       	
        {% load mytag %}
        {{ i|myfilter:1 }}
        {% mt 1 2 3 4 %}
        {% index 10 %}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    模板的继承

    能够继承母版的样式,并且能够部分修改

    {% extends 'html文件名' %}
       	{% block 名字 %}
        	模板内容
    	{% endblock %}
    
    • 1
    • 2
    • 3
    • 4
    模板的导入

    将html页面的某个部分当做模块的形式导入使用
    {% include ‘menu.html’ %}

  • 相关阅读:
    QT事件说明
    使用Tesseract-OCR对PDF等图片文件进行文字识别
    conda配置完整的pytorch虚拟环境
    Linux ALSA驱动之Platform源码分析(wm8350.c)
    VScode连接远程JupyterNotebook显示点云ply文件
    10kV光伏并网用电能质量在线监测装置
    如何用SVG画一个特定边框
    无代码平台单项选择入门教程
    [LCT刷题][树链信息维护] P4332 [SHOI2014]三叉神经树
    kotlin实现猜数游戏
  • 原文地址:https://blog.csdn.net/AL_QX/article/details/126693277