企业管理系统定制开发Django框架

一、企业管理系统定制开发如何解决组件不是内部企业管理系统定制开发或批处理命令

1、企业管理系统定制开发如果要使用pip,需要设置,添加比如D:\Python36\Scripts,因为pip在Scripts目录下

2、企业管理系统定制开发如何查找全局目录pip show 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框架,目录结构如下:

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

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

asgi.py:异步处理文件

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

templates:存放模板文件

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

  1. from django.shortcuts import render, HttpResponse
  2. # Create your views here.
  3. def epidemic(request):
  4. return render(request, 'epidemic.html', {'timer': '20220501'})
  5. def article(request, year, month):
  6. return render(request, 'article.html', {'year': year, 'month': month})
  7. def date_01(request):
  8. return HttpResponse("this is a template")

html数据渲染:

  1. {% for i in test %}
  2. {% forloop.first %}<!--第一个循环 -->
  3. {% forloop.last %}<!--最后一个循环 -->
  4. {% forloop.counter %}<!--循环数 -->
  5. {% if i == 1 %}
  6. <p>我是1</p>
  7. {% elif i == 2 %}
  8. <p>我是2</p>
  9. {% elif i is test1 %}
  10. 我是一个对象
  11. {% else %}
  12. <p>我是其他</p>
  13. {% endif %}
  14. {% endfor %}

{{ timer }} 数据渲染

继承渲染:

  1. #base.html
  2. {% block content %}
  3. 这是基本内容块
  4. {% endblock %}
  5. #其他html文件
  6. {% block content %}
  7. this is 引用base模板的其他部分,content是需要替换成自己专属的页面
  8. {% endblock %}

三、路由控制器

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

  1. #主路由
  2. from django.contrib import admin
  3. from django.urls import path, re_path, include
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. # 正则^$建议加上开始和结束标志
  7. # re_path('article/\d+',article)
  8. # 路由分发
  9. path('app01/', include('app01.urls'))
  10. ]
  11. #分路由
  12. from django.urls import path, re_path
  13. from . import views
  14. urlpatterns = [
  15. path('epidemic/', views.epidemic),
  16. #正则路由,反向解析
  17. re_path(r'^article/(?P<year>\d{4})/(?P<month>\d{0,3})/$', views.article, name='app01_article')
  18. ]

四、模型层(orm)

O(object) 对象 

R(relation) 关系

M (mapping) 映射

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

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

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

1、mysql数据库

1)安装驱动程序pymysql

pip install PyMySQL

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

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

3)全局配置文件setting.py

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'HOST': '127.0.0.1', # 数据库主机
  5. 'PORT': 3306, # 数据库端口
  6. 'USER': 'root', # 数据库用户名
  7. 'PASSWORD': '123456', # 数据库用户密码
  8. 'NAME': 'erp_ada' # 数据库名字
  9. }
  10. }

4)创建数据库

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

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

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

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

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.sqlite3',
  4. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  5. }
  6. }

3)工具右边添加数据库

4)数据库更新

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

迁移数据库python manage.py migrate

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

  1. LOGGING = {
  2. 'version': 1,
  3. 'disable_existing_loggers': False,
  4. 'handlers': {
  5. 'console':{
  6. 'level':'DEBUG',
  7. 'class':'logging.StreamHandler',
  8. },
  9. },
  10. 'loggers': {
  11. 'django.db.backends': {
  12. 'handlers': ['console'],
  13. 'propagate': True,
  14. 'level':'DEBUG',
  15. },
  16. }
  17. }  

 6、定义模型类

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

注册子应用:

 并引入子应用路由

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

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

五、ORM->pymysql的增删改查

1、创建表

迁移文件models.py

python manage.py makemigrations

同步到数据库中

python manage.py migrate

 2、添加数据

  1. #方法一:
  2. #erp = models.ErpList(
  3. # name="定时器",
  4. # type="无效定时",
  5. # amon=40,
  6. # price=300.08,
  7. # warehouse="加字号1仓"
  8. # )
  9. # erp.save()
  10. #方法二:
  11. erp = models.ErpList.objects.create(
  12. name="定时器2",
  13. type="无效定时2",
  14. amon=40,
  15. price=300.08,
  16. warehouse="加字号2仓"
  17. )

2、查询数据

 返回queryset数据

students = Student.objects.all()

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

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

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

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

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

  1. stu01 = Student.objects.first()
  2. 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()

按照需求进行列的返回 

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

3、修改数据

方法一:

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

方法二:

返回受影响的行数

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

 4、删除数据

  1. # 1. 先查询到数据模型对象。通过模型对象进行删除
  2. # student = Student.objects.filter(pk=13).first()
  3. # student.delete()
  4. # 2. 直接删除
  5. ret = Student.objects.filter(pk=100).delete()
  6. print(ret)
  7. # 务必写上条件,否则变成了清空表了。ret = Student.objects.filter().delete()

pycharm免费使用参考:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发