python学习--Django学习4、数据库的增删改查、django后台管理系统
发布日期:2021-05-07 08:14:26 浏览次数:16 分类:技术文章

本文共 6494 字,大约阅读时间需要 21 分钟。

Django映射类去增加数据库数据

本文创建数据库的表映射出来是这样	class Subject(models.Model):	    no = models.AutoField(primary_key=True)	    name = models.CharField(max_length=20)	    intro = models.CharField(max_length=1000, blank=True, null=True)	    is_hot = models.IntegerField(blank=True, null=True) #这里用IntegerField,修改的时候写0,1	   #is_hot = models.BooleanField(blank=True, null=True)     用BooleanField,修改时写True,Flase	   	    class Meta:	        managed = False         #如果改为True,可以通过类去修改数据库的表。如果为假,则是不可以	        db_table = 'tb_subject'打开当前虚拟环境终端(django)命令行工具	输入:		python manage.py shell       可以进入django交互式环境

Django模型操作数据库代码

#增加数据	subject = Subject(name='Python全栈开发',intro='当下最热门学科',is_hot=True)	subject.save()#删除数据	subject = Subject.objects.get(no=2)	subject.delete()#修改数据	subject = Subject.objects.get(no=2)	subject.name = '...'	subject.save()#查询数据	subject = Subject.objects.get(no=1)	subject	'''	可用名字查,可能查到同名的所有数据 subject = Subject.objects.filter(name='..')	'''#查询所有数据 --会拿到一个容器	subjects = Subject.objects.all()	subjects# 悲观锁(多进程查询之前必须拿到锁才能继续,否则阻塞)	subject = Subject.objects.select_for_update().get(no=1)# 乐观锁(查询不加锁,更新时做判断)

如果要使用Django模型管理的话,需要数据迁移

当前虚拟环境下输入:	python manage.py migrate  #把Django框架自带的模型类,变成数据库的表(迁移10张表到数据库)创建超级管理员账号,终端再次输入:	python manage.py createsuperuser	#会让输入账号,邮箱,密码。 本文用admin账号,这步操作完就可以登录Django后台管理系统了注册模型	在应用下找admin.py文件中(本文创建的应用是polls/admin.py)	from django.contrib import admin	from polls.models import Subject    #导入模型类          --添加这句	admin.site.register(Subject)        #注册模型            --添加这句   完成后可刷新django管理页汉化模型	在应用下找models.py文件中(本文创建的应用是polls/models.py).在Meta类中添加代码	    class Meta:	        managed = False	        db_table = 'tb_subject'	        verbose_name = '学科'          #添加这句  这是单数形式,只添加这句name后加s为复数	        verbose_name_plural = '学科'   #添加这句    复数也显示name,不加s  	如果想汉化数据页面的语言,可以在数据库的表映射出来的类属性后面加上verbose_name='别名'.例如:	    no = models.AutoField(primary_key=True,verbose_name='编号')   	    name = models.CharField(max_length=20,verbose_name='名称')自定义模型显示方式		点击学科表,不会显示具体数据,只显示主键.找到polls/admin.py 修改数据			from django.contrib import admin		from polls.models import Subject				class SubjectModelAdmin(admin.ModelAdmin):        #定义新类继承django中admin.ModelAdmin的类		    list_display = ('no','name','intro','is_hot') #查询数据都显示那些数据		    search_fields = ('name',)                    #添加搜索框		    list_per_page = 20						#每页存放的数据		    list_filter = ('yi_name',)				#可以根据条件筛选		    ordering = ('no',)               #主键排序   ('-主键')降序,('主键')升序		admin.site.register(Subject,SubjectModelAdmin)    #把数据库的表映射到后台管理系统上simpleui中admin的基本配置信息(settings中)SIMPLEUI_ANALYSIS = False   		#关闭分析(一般加在settings中,这个框架默认采集信息,默认开启)SIMPLEUI_HOME_INFO = False   		#关闭服务器信息SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'  #修改logo	(admin中)admin.AdminSite.site_header = '商品信息管理'		#修改登陆页的标题admin.AdminSite.site_title = '商品信息管理'			#修改登陆页面的标题admin中如果要上传文件的话(例如图片)1.在项目下新建文件夹(例如:media)#数据库中必须有Field字段2.MEDIA_URL = "/media/"  # 设置获取文件时的访问根路径 (访问的路径) #访问时,会加上这个路径,如果数据库中是绝对路径则不需要3.MEDIA_ROOT = os.path.join(BASE_DIR, "media")#设置上传图片的文件夹(存入的路径)#此时数据库中存的是文件名,如果访问的话,会自动加上/media/这个路径4.主urls中添加访问路由from django.urls import re_pathfrom django.views.static import serveurlpatterns = [	re_path(r'media/(?P
.*)$',serve,{'document_root':settings.MEDIA_ROOT}), ]

渲染subjects.html

在视图views.py中			def show_subjects(request):		    subujects = Subject.objects.all().order_by('-no')    #获取到数据库中表的所有数据,order_by('-no')降序		    res = render(request,'subjects.html',{		        'subjects':subujects                          #渲染数据到subjects.html中		    })		    return HttpResponse(res)         #返回一个渲染后的html文件(response对象)

Django中放静态资源

一般放主项目路径下My_django/static/css images js    (本文项目为My_django,static文件自己创建)修改setting.py文件,创建后最底下会多出一行代码STATIC_URL = '/static/'如果没有自己添加STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),]   #添加这句STATIC_URL = '/static/'	                                #添加这句   --在文件末行修改完成找到html文件中的存放静态资源的src修改资源路径  示例:      #最后部署项目不是这种方式访问静态资源

Django超链接跳转对应的视图函数

修改subject.html  	{% for subject in subjects %}            
#改了这句
{ { subject.name }} {% if subject.is_hot %}
{% endif %}
{ { subject.intro }}
{% endfor %} #href后改为点击后访问的视图函数地址在views.py中写跳转后的视图函数 def show_teachers(request : HttpResponse) -> HttpResponse: teachers = None res = render(request,'teachers.html',{ 'teachers':teachers )} return HttpResponse(res)在urls.py中添加访问链接:path('teachers/',show_teachers),##完成这步可以访问teachers页面,但是由于老师数据库模型还没搭建,所以只会显示静态资源

深入模型Django模型 --查询(这里以此项目为例)

查询所有数据	Subject.objects.all()过滤数据	Subject.objects.filter(name='Python全栈开发+人工智能')	#查询名为'Python全栈开发+人工智能'的学科		(精准查询)	Subject.objects.filter(name__contains='全栈')	#查询名为'全栈'的学科							(模糊查询)	Subject.objects.filter(is_hot =True)       	#查询热门学科,模型里面为True的字段			    (精准查询)	Subject.objects.filter(no__gt=3).filter(no__lt=10)	Subject.objects.filter(no__gt=3,no__lt=10)	#查询编号大于3,小于10的字段					(精准查询)	Subject.objects.filter(no__ge=3,no__le=10)	Subject.objects.filter(no__range=(3,10))	#查询编号3到10的字段							(精准查询,区间查询)	Subject.objects.get(pk=1)	Subject.objects.get(no=1)	Subject.objects.get(no=1).first()	Subject.objects.get(no=1).last()	#查询主键为1的学科  							(精准查询)	Subject.objects.order_by('no')	#查询所有,按编号升序                           (精准查询)	Subject.objects.order_by('-no')	#查询所有,按编号降序	Subject.objects.order_by('no')[:3]	#查询从编号从小到大前3个字段				    (精准查询)	Subject.objects.count()	#查询数据库一共有多少条数据						(精准查询)	Teacher.objects.filter(subject__no=1)	Subject.objects.get(pk=1).teacher_set.all()	# 查询编号为1的学科的老师	Teacher.objects.filter(subject__name__contains='全栈')	# 查询学科名称有“全栈”二字的学科的老师           (模糊查询)说明1:由于老师与学科之间存在多对一外键关联,所以能通过学科反向查询到该学科的老师(从一对多关系中“一”的一方查询“多”的一方),反向查询属性默认的名字是 类名⼩写_set (如上面例子中的 teacher_set ),当然也可以在创建模型时通过 ForeingKey 的 related_name 属性指定反向查询属性的名字。如果不希望执行反向查询可以将 related_name 属性设置为 '+' 或者以 '+' 开头的字符串。说明2:ORM查询多个对象时会返回QuerySet对象,QuerySet使用了惰性查询,即在创建QuerySet对象的过程中不涉及任何数据库活动,等真正用到对象时(对QuerySet求值)才向数据库发送SQL语句并获取对应的结果,这⼀点在实际开发中需要引起注意!说明3:如果希望更新多条数据,不用先逐一获取模型对象再修改对象属性,可以直接使用QuerySet对象的 update() 方法一次性更新多条数据。查询参考按字段查找可以用的条件1. exact / iexact :精确匹配/忽略大小写的精确匹配查询2. contains / icontains / startswith / istartswith / endswith / iendswith :基于 like 的模糊查询3. in :集合运算4. gt / gte / lt / lte :大于/大于等于/小于/小于等于关系运算5. range :指定范围查询(SQL中的 between…and… )6. year / month / day / week_day / hour / minute / second :查询时间日期7. isnull :查询空值(True)或非空值(False)8. search :基于全文索引的全文检索(一般很少使⽤)9. regex / iregex :基于正则表达式的模糊匹配查询
上一篇:python学习 --Django学习5、数据库查询、页面重定向
下一篇:python学习 -Django学习3、修改setting、连接mysql、映射数据表

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月11日 21时38分00秒