Django实现教育平台全程记录-----后台管理

课程机构列表页面数据展示

本地图片上传至Django项目中

model

class CourseOrg(models.Model):
    city = models.ForeignKey(CityDict,verbose_name=u"所在城市")
    name = models.CharField(max_length=100,verbose_name=u"机构名称")
    category = models.CharField(default='pxjg',choices=(("pxjg",u"培训机构"),("gx",u"高校"),("gr",u"个人")),max_length=10,verbose_name=u"机构类别")
    desc = models.TextField(verbose_name=u"机构描述")
    fav_nums = models.IntegerField(default=0,verbose_name=u"收藏人数")
    click_nums = models.IntegerField(default=0,verbose_name=u"点击人数")
    addr = models.CharField(max_length=100,verbose_name=u"机构地址")
    image = models.ImageField(upload_to="org/%Y%m",verbose_name="logo")
    add_time = models.DateTimeField(default=datetime.now,verbose_name=u'添加时间')

通过xadmin插入img,从本地上传文件,需要在setting中配置MEDIA_ROOT,并在Django目录下新建“media”目录。(MEDIA_URL配置url会用到),


MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

这样点击“选择文件”上传,本地图片会传到Django的media中。


显示本地上传的图片

在settings中的TEMPLATES中添加

'django.core.context_processors.media',
这样在前端的{{ MEDIA_URL }}才能转换成 “/media/”。
            {% for obj in queryOrg %}
                 <a href="org-detail-homepage.html">
                     <img width="200" height="120"   src="{{ MEDIA_URL }}{{ obj.image }}"/>
                  </a>
            {% endfor %}

此时,虽然前端显示的url正确了,,但是还是不能显示图片,需要在前端配置url,才能正常显示图片。

from django.views.static import serve
from settings import MEDIA_ROOT

urlpatterns = [
    url(r'^media/(?P<path>.*)$',serve,{'document_root':MEDIA_ROOT}),
]

实现分页

https://blog.csdn.net/qq_34964399/article/details/79596428

按照点击量前3进行排序
hot_orgs = CourseOrg.objects.all()order_by("-click_nums")[:3]
按照城市和类别并联筛选 课程机构
class OrgView(View):
    def get(self,request):
        Citys = CityDict.objects.all()
		Orgs =  CourseOrg.objects.all()
		
        # 城市筛选
        cur_city = request.GET.get('city','')
        if cur_city:
            Orgs = Orgs.filter(city__id=int(cur_city))
			
        # 类别筛选
        cur_category = request.GET.get('category',"")
        if cur_category:
            Orgs = Orgs.filter(category=cur_category)

        return render(request,'org-list.html',{"Citys":Citys,"orgs":orgs,
                                               'OrgsNum':OrgsNum,
                                               "cur_city":cur_city,
                                               "cur_category":cur_category,
                                               })

前端

<li>
	<h2>机构类别</h2>
	<div class="cont">
		<a href="?city={{ cur_city }}&category="><span {% ifequal cur_category "" %}class="active2"{% endifequal %}>全部</span></a>
		<a href="?city={{ cur_city }}&category=pxjg"><span {% ifequal cur_category "pxjg" %}class="active2"{% endifequal %}>培训机构</span></a>
		<a href="?city={{ cur_city }}&category=gx"><span {% ifequal cur_category "gx" %} class="active2"{% endifequal %}>高校</span></a>
		<a href="?city={{ cur_city }}&category=gr"><span {% ifequal cur_category "gr" %} class="active2"{% endifequal %}>个人</span></a>
	</div>
</li>
<li>
	<h2>所在地区</h2>
	<div class="more">更多</div>
	<div class="cont">
		<a href="?city=&category={{ cur_category }}"><span class="{% ifequal cur_city "" %}active2{% endifequal %}">全部</span></a>
		{% for city in Citys %}
			<a href="?city={{ city.id }}&category={{ cur_category }}" ><span class="{% ifequal city.id|stringformat:'i' cur_city %}active2{% endifequal %}">{{ city.name }}</span></a>
		{% endfor %}
	</div>
</li>

这样就可以并联筛选了

Ajax和ModelForm写用户咨询表单

https://blog.csdn.net/qq_34964399/article/details/80416365

通过Ajax实现用户对机构的收藏

model

class UserFavorite(models.Model):
    user = models.ForeignKey(UserProfile,verbose_name=u"用户")
    fav_id = models.IntegerField(default=0,verbose_name=u"数据id")
    fav_type = models.CharField(max_length=10,choices=((1,u"课程"),(2,u"课程机构"),(3,u"讲师")),default=1,verbose_name=u"收藏类别")
    add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加时间")

views

class AddFavView(View):
    def post(self,request):
        ret = {'status':True,'data':None,'error':None}
        if not request.user.is_authenticated():
            ret['status'] = False
            return HttpResponse(json.dumps(ret))
        # 判断该机构是否已经被收藏,如果已收藏:数据库删除该记录,变成未收藏
        org_id = request.POST.get("fav_id",0)   # 如果不写0,如果未取到fav_id则为None,下面的filter中fav_id=None的话会错
        fav_type = request.POST.get("fav_type",0)
        exist_record = UserFavorite.objects.filter(user=request.user,fav_id=int(org_id),fav_type=int(fav_type))
        # 该机构已经被用户收藏则取消收藏
        if exist_record:
            exist_record.delete()
            ret['data'] = "收藏"
            return HttpResponse(json.dumps(ret))
        # 该机构未被用户收藏
        else:
            if int(org_id) > 0 and int(fav_type) > 0:
                userFav = UserFavorite()
                userFav.user = request.user
                userFav.fav_id = int(org_id)
                userFav.fav_type = int(fav_type)
                userFav.save()
                ret['data'] = "已收藏"
                return HttpResponse(json.dumps(ret))
            else:
                ret['status'] = False
                ret['data'] = "收藏出错"
                return HttpResponse(json.dumps(ret))

前端Ajax

$('.collectionbtn').on('click',function(){
    $.ajaxSetup({
        beforeSend:function(xhr,settings){
            xhr.setRequestHeader('X-CSRFtoken',"{{csrf_token}}");
            }
        });
    $.ajax({
        url:'{% url 'org:add_fav' %}',
        type:'POST',
        data:{'fav_id':{{ course_org.id }},'fav_type':2},  
        success:function(data){  // 这个data是上面的data发送给服务端后,服务端返回的值
            var ret = JSON.parse(data);
                        if(ret['status'])
                        {$(".collectionbtn").html(ret['data'])}
                        else
                        {if(ret['data'] == "收藏出错" ){
                            alert(ret['data']);
                        }
                            else{
                                window.location.href="/login/";
                            }
                        }
        },
        error:function(){
            alert('error')  // 如果后端发生了未知错误(捕获到的错误不是未知错误),则会执行这里。比如 return HttpResponse(json.dumps(a1qdwq))
        }
    })
});

这样就可以收藏和取消收藏了


添加学习用户

https://blog.csdn.net/qq_34964399/article/details/79515440     第一段

机构,教师,课程搜索

https://blog.csdn.net/qq_34964399/article/details/80568374

猜你喜欢

转载自blog.csdn.net/qq_34964399/article/details/80384071