Django框架

一、如何解决组件不是内部或批处理命令

1、如果要使用pip,需要设置环境变量,添加比如D:\Python36\Scripts,因为pip在Scripts目录下

2、如何查找django全局目录pip show django

Django框架

二、创建django框架(MTV)

pip install django#安装django框架,Scripts目录新增文件
cd 工程目录#跳转工程目录
pip show django#获取框架目录,添加到全局变量
django-admin –version#查看是否安装成功
django-admin#查看组件
django-admin startproject 工程名称#创建工程目录
python manage.py runserver IP PORT#不加后两项自动默认设置,启动项目
python manage.py startapp app01#创建app应用,可有可没有此步骤,根据项目情况创建。如果创建请在settings->INSTALLED_APPS里面加上新创建的app名字

以上步骤就创建了一个django框架,目录结构如下:

Django框架

注:除了djangopro这个外部文件目录,其他文件名不要改动,否则会报错。

app01:应用文件夹,为了解耦设计,可以有多个这样的目录

asgi.py:异步处理文件

settings.py:全局配置文件,全局参数都在这里配置

templates:存放模板文件

3、模板渲染,HttpResponse直接把命令渲染到空白页面,render渲染数据到html页面

from django.shortcuts import render, HttpResponse

Create your views here.

def epidemic(request):
    return render(request, 'epidemic.html', {'timer': '20220501'})

def article(request, year, month):
    return render(request, 'article.html', {'year': year, 'month': month})

def date_01(request):
    return HttpResponse("this is a template")

html数据渲染:

{% for i in test %}
{% forloop.first %}
{% forloop.last %}
{% forloop.counter %}
    {% if i == 1 %}
        我是1
    {% elif  i == 2 %}
        我是2
    {% elif i is test1 %}
        我是一个对象
    {% else %}
        我是其他
    {% endif %}
{% endfor %}

{{ timer }} 数据渲染

继承渲染:

#base.html
{% block content %}
这是基本内容块
{% endblock %}

#其他html文件
{% block content %}
    this is 引用base模板的其他部分,content是需要替换成自己专属的页面
{% endblock %}

三、路由控制器

1、正则路由,路由分发,反向解析

#主路由
from django.contrib import admin
from django.urls import path, re_path, include

urlpatterns = [
    path('admin/', admin.site.urls),

    # 正则^$建议加上开始和结束标志
    # re_path('article/\d+',article)
    # 路由分发
    path('app01/', include('app01.urls'))

]

#分路由
from django.urls import path, re_path
from . import views

urlpatterns = [
    path('epidemic/', views.epidemic),
    #正则路由,反向解析
    re_path(r'^article/(?P\d{4})/(?P\d{0,3})/$', views.article, name='app01_article')

]

四、模型层(orm)

O(object) 对象

R(relation) 关系

M (mapping) 映射

orm优点:语义清晰,代码量少,方便更新维护,缺点:非轻量级,比原生sql复杂,无法了解底层

解决方式:可以使用其他数据库

pymysql另外操作即可,用了ORM并不表示当前项目不能使用别的数据库操作工具了

1、mysql数据库

1)安装驱动程序pymysql

pip install PyMySQL

2)在工程同名的文件夹中__init__.py文件中添加如下语句

from pymysql import install_as_MySQLdb
install_as_MySQLdb() # 让pymysql以MySQLDB的运行模式和Django的ORM对接运行

3)全局配置文件setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 数据库主机
        'PORT': 3306,  # 数据库端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456',  # 数据库用户密码
        'NAME': 'erp_ada'  # 数据库名字
    }
}

4)创建数据库

create database student default charset=utf8mb4; # mysql8.0之前的版本

2、sqlite数据库配置(Django自带数据库)

1)假如出现os问题,一般是settings文件没有引入os,直接import os即可

2)使用sqlite3数据库的settings文件设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

3)工具右边添加数据库

Django框架

4)数据库更新

构造表结构数据库python manage.py makemigrations

迁移数据库python manage.py migrate

3、如果想打印orm转换过程中的sql,需要在settings中进行如下配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}  

6、定义模型类

  • 模型类被定义在”子应用/models.py”文件中。
  • 模型类必须直接或者间接继承自django.db.models.Model类。

注册子应用:

Django框架

并引入子应用路由

Django框架

类型说明AutoField自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性BooleanField布尔字段,值为True或FalseNullBooleanField支持Null、True、False三种值CharField字符串,参数max_length表示最大字符个数,对应mysql中的varcharTextField大文本字段,一般大段文本(超过4000个字符)才使用。IntegerField整数DecimalField十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数,常用于表示分数和价格 Decimal(max_digits=7, decimal_places=2) ==> 99999.99~ 0.00FloatField浮点数DateField日期参数auto_now表示每次保存对象时,自动设置该字段为当前时间。参数auto_now_add表示当对象第一次被创建时自动设置当前。参数auto_now_add和auto_now是相互排斥的,一起使用会发生错误。TimeField时间,参数同DateFieldDateTimeField日期时间,参数同DateFieldFileField上传文件字段,django在文件字段中内置了文件上传保存类, django可以通过模型的字段存储自动保存上传文件, 但是, 在数据库中本质上保存的仅仅是文件在项目中的存储路径!!ImageField继承于FileField,对上传的内容进行校验,确保是有效的图片

选项说明null如果为True,表示允许为空,默认值是False。相当于python的Noneblank如果为True,则该字段允许为空白,默认值是False。 相当于python的空字符串,””db_column字段的名称,如果未指定,则使用属性的名称。db_index若值为True, 则在表中会为此字段创建索引,默认值是False。 相当于SQL语句中的keydefault默认值,当不填写数据时,使用该选项的值作为数据的默认值。primary_key如果为True,则该字段会成为模型的主键,默认值是False,一般不用设置,系统默认设置。unique如果为True,则该字段在表中必须有唯一值,默认值是False。相当于SQL语句中的unique

五、ORM->pymysql的增删改查

1、创建表

Django框架

迁移文件models.py

python manage.py makemigrations

同步到数据库中

python manage.py migrate

2、添加数据

#方法一:
 #erp = models.ErpList(
      #  name="定时器",
       # type="无效定时",
       # amon=40,
       # price=300.08,
       # warehouse="加字号1仓"
   # )
   # erp.save()

#方法二:
    erp = models.ErpList.objects.create(
        name="定时器2",
        type="无效定时2",
        amon=40,
        price=300.08,
        warehouse="加字号2仓"
    )

2、查询数据

返回queryset数据

students = Student.objects.all()

查询符合条件的数据(queryset)

students = Student.objects.filter(sex=0)

查询符合条件的一条数据,0条或者多条返回错误(model)

student = Student.objects.get(name="刘德华")

返回第一条或者最后一条数据(model)

stu01 = Student.objects.first()
stu02 = Student.objects.last()

查询不符合条件的一条数据(queryset)

students = Student.objects.exclude(name="张三")

查询数据进行排序

students = Student.objects.filter(sex=1).order_by("-age", "-id")

查询数据总个数

count = Student.objects.filter(sex=1).count()

按照需求进行列的返回

ret1 = student_list.values() # 默认把所有字段全部转换并返回
ret2 = student_list.values("id","name","age") # 可以通过参数设置要转换的字段并返回
ret3 = student_list.values_list() # 默认把所有字段全部转换并返回
ret4 = student_list.values_list("id","name","age") # 可以通过参数设置要转换的字段并返回

3、修改数据

方法一:

student = Student.objects.filter(name='刘德华').first()
print(student)
student.age = 19
student.classmate = "303"
save之所以能提供给我们添加数据的同时,还可以更新数据的原因?
save会找到模型的字段的主键id的值,
主键id的值如果是none,则表示当前数据没有被数据库,所以save会自动变成添加操作
主键id有值,则表示当前数据在数据库中已经存在,所以save会自动变成更新数据操作
student.save()

方法二:

返回受影响的行数

student = Student.objects.filter(name="赵华",age=22).update(name="刘芙蓉",sex=True)

4、删除数据

1. 先查询到数据模型对象。通过模型对象进行删除
student = Student.objects.filter(pk=13).first()
student.delete()

2. 直接删除
ret = Student.objects.filter(pk=100).delete()
print(ret)
务必写上条件,否则变成了清空表了。ret = Student.objects.filter().delete()

pycharm免费使用参考:IDEA安装IDE Eval Reset插件_CVPR收割机的博客-CSDN博客_idea reset 插件

Original: https://blog.csdn.net/tainqiuer123/article/details/124363100
Author: AdaTina
Title: Django框架

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737788/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [2022-11 持续更新] 谷歌google镜像/Sci-Hub可用网址/Github镜像可用网址总结

    一、谷歌学术镜像 二、Sci-Hub 三、Github镜像 四、GitHub下载文件加速 利用 Cloudflare Workers 对 github release 、archi…

    Python 2023年9月16日
    0108
  • Pandas入门详细教程(二)

    文章目录 * – pandas常用统计方法 – 数据合并之join、merge – 分组和聚合 pandas基础内容可跳转之前文章 Pandas…

    Python 2023年8月7日
    056
  • Alien Skin Exposure X7 Bundle Mac/Win(ps/lr胶片滤镜插件套装)

    Original: https://www.cnblogs.com/aurora-123/p/16779677.htmlAuthor: 佛系女孩Title: Alien Skin …

    Python 2023年10月25日
    049
  • Python按条件筛选列,并计算多个文件平均值

    筛选:import pandas as pddf1 = pd.read_excel(“lucclst.xlsx”) 筛选lucc列中值为101,lcz列中值…

    Python 2023年8月29日
    056
  • Flask博客实战 – Nginx+uwsgi+mysql+宝塔面板部署Flask

    部署项目 我们的项目已经基本的框架和功能都完善好了,是不是已经迫不及待的想把项目发布到线上向伙伴们炫耀了! 部署项目是一个涉及知识面比较广的技能,那么我们还是以最简单,最容易上手的…

    Python 2023年8月9日
    0111
  • Python写游戏,我上我也行 – Flappy Bird 01

    哈喽各位小伙伴,如果你看到这里呢,说明我们有缘分, 不要走,求求你…留下来点个关注加三连吧!!! 可以看到,小泽大早上8点就起来了,一心想着给大家伙更新好玩的东西,甚至…

    Python 2023年9月23日
    051
  • 避免死锁 —— 银行家算法

    综述 以下概念引用与 银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统…

    Python 2023年8月23日
    093
  • scrapy的name变量_scrapy xpath 常用方法

    [TOC] 1、命令行启动scrapy scrapy shell "http://www.baidu.com/" 然后使用 respone 变量, respon…

    Python 2023年10月6日
    040
  • shoppe项目08—-购物车

    目录 购物车数据结构 添加购物车 查看购物车 购物车数据结构 由于购物车数据量小,且数据变化比较频繁,所以采用Redis内存数据库来存储,采用的数据类型如下: 存储商品数据,采用h…

    Python 2023年8月6日
    070
  • flask学习记录004

    flask学习记录004 0. 模板注释: 1. 模板可传递变量 2. 模板控制语法:控制块 if ,for 3. 模板过滤器 4. 模板复用 * 一、模板继承 二、include…

    Python 2023年8月12日
    043
  • 编程码风汇总

    1. 前言2. 码风说明2-1. 注释代码2-2. 代码人身攻击2-3. 打空格2-4. 自定义函数2-5. 万能头2-6. 大括号2-7. 快读2-8. STL3. 后记 众所周…

    Python 2023年10月17日
    034
  • numpy生成数组

    numpy 是重要的科学计算工具通过numpy我们可以生成模拟数据,比如随机生成一个数,随机生成一个服从正态分布的随机数1.1 创建数组在进行数学运算之前我们首先要创建数组。Num…

    Python 2023年8月29日
    046
  • 用python刷算法–快速排序算法

    快速排序算法流程 选定一个基准值(任意选,以第一个为例) 定义左右指针指向左右两端 左指针往右移动,如果遇到大于基准值的数就把它和右指针的值调换位置,然后左指针不动,右指针开始向左…

    Python 2023年6月3日
    075
  • matplotlib自定义风格

    使用matplotlib进行绘图时,经常遇到个问题,就是总是要花大量代码对绘图的格式进行设置。虽然可以将同一类绘图的代码保存以后使用,但是看着这么长一串用来设置格式就很不爽。 一、…

    Python 2023年9月3日
    084
  • 基础算法篇——前缀和与差分

    本次我们介绍基础算法中的前缀和与差分,我们会从下面几个角度来介绍前缀和与差分: 前缀和介绍 一维前缀和 二维前缀和 差分介绍 一维差分 二维差分 前缀和介绍 首先我们来简单介绍一下…

    Python 2023年10月16日
    037
  • 【目标检测】Flask+Docker在服务器部署YOLOv5应用

    前言 看到不少文章讲解用Flask部署YOLOv5的,不过基本都在本地上能够运行而戛然而止。因此,我打算再进一步,利用Docker在云服务器上部署YOLOv5,这样就能够开放给别人…

    Python 2023年8月15日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球