阅读:40
学习视频:Django3.2 快速入门(四小时快速掌握核心内容) P4-P6
ListView、模板语言、QuerySet
视频p4中运行出疫情人员登记表
创建应用
在终端输入
py manage.py startapp personal_info
setting中添加应用(在INSTALLED_APPS里面添加)
personal_info.apps.PersonalInfoConfig', #加入创建的应用
连接数据库mysql
seting中更改DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# mysql数据库名称
'NAME': 'person',
# 登陆mysql的用户名
'USER': 'root',
# 登陆mysql的用户名密码
'PASSWORD': '0313',
# mysql ip地址,不填表示使用默认地址,默认为localhost
'HOST': 'localhost',
# mysql端口号,不填表示使用默认端口,默认为3306
'PORT': '3306',
}
}
file —> settings ----> project 解释器 —> 点击+ ----> 输入pymysql —>
install
import pymysql
pymysql.install_as_MySQLdb()
models创建模型
因为涉及数据库交互!
from django.db import models
class Person(models.Model):
GENDER_CHOICES={
(1, '男'),
(2, '女')
}
name=models.CharField(max_length=12)
age=models.IntegerField()
gender=models.BooleanField(choices=GENDER_CHOICES)
id_card=models.CharField(max_length=18)
address=models.CharField(max_length=255)
temperature=models.FloatField()
class Meta:
permissions=() #把django系统生成的权限置为空
生成迁移文件和执行迁移文件
作用:在数据库中建立表
生成迁移文件
python manage.py makemigrations
执行迁移文件
python manage.py migrate
views.py
是model !!! 不是models
from django.views.generic import ListView
from personal_info.models import Person
class PersonList(ListView): #列表视图 查
model=Person #定义model,决定从Person取数据 model!!! 不是models
template_name = 'person_list.html' #模板,渲染到person_list.html
项目中的urls
在urlpatterns添加路径
path('person/', include('personal_info.urls'))
应用中的urls
as_view将类转化为视图
from django.urls import path
from personal_info.views import PersonList
app_name='personal_info' #应用名
urlpatterns = [
path('', PersonList.as_view(),name='personList') #django的类视图拥有自动查找指定方法的功能,通过调用as_views()方法实现
]
访问路径是127.0.0.1:8000/person
根据P5教程在页面上运行出数据相加结果
views.py
from django.views.generic import ListView
from personal_info.models import Person
class PersonList(ListView):
model=Person #定义model,从哪取数据 model!!! 不是models
template_name = 'person_list.html' #模板,渲染到哪个地方
def get_context_data(self, *, object_list=None, **kwargs):
context=super().get_context_data(object_list=object_list,**kwargs)
context.update({'lst':[1.23,2.4532,3.45223,4.21233]})
return context
html文件中加入
{% load mytags %} #load加载mytags文件
{{ lst|add_filter }} #第一个参数是lst,即[1.23,2.4532,3.45223,4.21233]
{% add_tag lst %}
新建一个templatetags包,再包下新建mytags.py文件
mytags.py
加入装饰器
from functools import reduce
from django import template
register=template.Library()
#需要用到装饰器,否则会像普通的函数用不了
@register.filter(is_safe=False)
def add_filter(value,rounded=2):
assert isinstance(value,list) #判断是否是列表
return round(sum(value),rounded) #对浮点数进行近似取值,保留2位小数
@register.simple_tag
def add_tag(*args,**kwargs):
args=args[0]
assert isinstance(args,list) #判断是否是列表
result=reduce(lambda x,y:x+y,args) #对元素进行累积
rounded=kwargs.get('rounded')
rounded=rounded or 2
result=round(result,rounded)
return result
结果是:11.35 11.35
根据P6教程在pycharm上执行查询、保存等操作
instance常用函数:
save()、get()、delete()、
QuerySet:
filter()、get()、all() 、delete()、 update()、 create()
终端中输入
进入到django的命令行
python manage.py shell
执行增加,保存和查询等操作
注意带函数后加括号
>>> from personal_info.models import Person #导入Person
>>> p=Person(name='王五',age=21,gender=1,id_card='012345',address='河南省',temperature=36.5)
>>> p.save()
>>> p
<Person: Person object (3)>
>>> ps1=Person.objects.filter()
>>>> ps1.count()
3
>>> ps3=Person.objects.get(name='dd')
>>> ps3.age
20
>>> ps3.address
'4号路'
>>> ps4=Person.object.filter(Q(name='dd'|Q(temperature=38))
参考:
Django中Queryset的使用(一)
django学习之Model(三)QuerySet
Python reduce() 函数
Python round() 函数