一、如何解决组件不是内部或批处理命令
1、如果要使用pip,需要设置环境变量,添加比如D:\Python36\Scripts,因为pip在Scripts目录下
2、如何查找django全局目录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页面
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 %}
<p>我是1</p>
{% elif i == 2 %}
<p>我是2</p>
{% elif i is test1 %}
我是一个对象
{% else %}
<p>我是其他</p>
{% 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<year>\d{4})/(?P<month>\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)工具右边添加数据库
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类。
注册子应用:
并引入子应用路由
类型 | 说明 |
---|---|
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、添加数据
#方法一:
#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、删除数据文章来源:https://www.toymoban.com/news/detail-433700.html
# 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 插件文章来源地址https://www.toymoban.com/news/detail-433700.html
到了这里,关于Django框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!