最近再给客户做一个数据展示的后台操作界面,给的数据是mongo的,要知道django对mongo不是很友好,网上有说views层操作mongo数据库和操作mysql大体差不多,但是例如mysql的查询语句是下面这样查询所有的:
all = models.send.objects.all().values('party_id','party_name','party_img')
很遗憾,mongo可是做不到,他没有all(),没有value(),所以用操作mysql的方法来操作mongo是不切实际的。
补充一句,django对接mongo是不需要执行迁移的,但是model层建表还是要有的,当连接好数据库执行程序后(通过浏览器执行配置好的url),会根据models建的模生成数据库;但是如果想拿到客户给的mongo数据,model层的表名(即类名)要和拿到的collection(类似于mysql的表)的名称一致,而models层的字段名要和collection内部的key值一致(因为mongo不同于mysql,其collection数据形式是key:value的形式)
整体流程如下:
- 主要目录展示:
-
展示models的建模
from mongoengine import * #mongo的模板是要继承mongoengine下Document的,而不是mysql里面的Models class article(Document): # 定义数据库中的所有字段,及拿到的客户表key值 two_level_site = StringField(max_length=32) three_level_site = StringField(max_length=32) four_level_site = StringField(max_length=32) subject = StringField(max_length=32) department = StringField(max_length=32) article_title = StringField() article_link = StringField() article_type = StringField() article_post_date = DateTimeField() insert_time = DateTimeField() article_stream = StringField() article_content = StringField() # 指明连接的数据表名 meta = {'collection':'article'}
-
views层
# 取值 def neirongView(request): if request.method == 'GET': #article是表名,这一步是拿到article的QuerySet find_neirong = article.objects #既然没有mysql的查询方法,那么就自建一个列表,用于存储取到的数据 context = [] # 将列表设置为全局变量 global context # QuerySet是需要遍历才能取到值的 for f in find_neirong: #拿到数据库的id,注意models里面并没有设置id字段,这样拿到的是mongo自动生成的objectid id = f.id #通过“对象+.”的方法拿到数据库指定key值下面的内容 #注意其中two_title是可以任意命名的,而two_level_site必须要和数据库的key一致 two_title = f.two_level_site three_title = f.three_level_site four_title = f.four_level_site lanmu = f.subject bushi = f.department title = f.article_title t_url = f.article_link t_sjlx = f.article_type date1 = f.article_post_date date2 = f.insert_time a_stream = f.article_stream # 遍历取完的值要放到一个暂时的字典中,改字典的目的是将取到的值封装成key、value的形式 #只有这样才能在界面上根据key取到其对应数据库的value值,单引号内部明明可以随意,但是后面的value是必须要和上面写的字段一致,为了更容易理解,建议我这样写 context1 = {'id':id,'two_title': two_title, 'three_title': three_title, 'four_title': four_title, 'lanmu': lanmu, 'bushi': bushi, 'title': title, 't_url': t_url, 't_sjlx': t_sjlx, 'date1': date1, 'date2': date2,'a_stream':a_stream } # context1的值会一直别覆盖(字典不允许有重复的key),所以每次遍历赋值后都要append一开始创建的context列表中 #最终context的形式为[{key:value}{key1}{value1}...{}] context.append(context1) # 最终就可以通过render渲染context到html界面取值了 return render(request,'content.html',{'context':context})
-
配置url
#主url from django.urls import path,include from apps.index import views # from apps.neirong import views urlpatterns = [ path('neirong/',include('apps.neirong.urls')), ]
#app的url from django.contrib import admin from django.urls import path,include from apps.neirong import views urlpatterns = [ path('',views.neirongView), ]
-
界面取值
{% for i in context %} <tr> <td >{{ i.id }}</td> <td>{{ i.two_title }}</td> <td>{{ i.three_title }})</td> <td>{{ i.four_title }}</td> <td>{{ i.lanmu }}</td> <td>{{ i.bushi }}</td> <td >{{ i.title }}</td> <td scope="row"> {{ i.t_url }} </td> <td>{{ i.t_sjlx }}</td> <td>{{ i.a_stream }}</td> <td>{{ i.date1 }}</td> {# <td>2015/08/08</td>#} <td>{{ i.date2 }}</td> <td> <div role="presentation" class="dropdown"> <button class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"> 操作<span class="caret"></span> </button> <ul class="dropdown-menu"> <li><a href="#">编辑</a></li> <li><a href="#">删除</a></li> <li><a href="#">全局置顶</a></li> </ul> </div> </td> </tr> {% endfor %}
-
运行查看结果:
毕设没思路看这里:https://blog.csdn.net/Q893448322/article/details/107642349?spm=1001.2014.3001.5501
如果对您有帮助,赏口饭吃❤谢谢老板❤