95992828九五至尊2

Xadmin塑造在线教育平台,1在线教育零基础到上线教程

三月 10th, 2019  |  882828九五至尊手机版

世家好,小编是四个就学Python一年多的小司机,2018年在慕课网买了Django那门课仓促的学习落成,时隔一年发现自个儿已经忘得几近了。此次复习既是协调的读书笔记总括,也想与对Python有趣味,对Django有兴趣的同窗有所援助。

以身作则地址:
http://mxonline.mtianyan.cn

2018年的Django课程作者路途坎坷,平常蒙受改了少数代码,前边写好的花色都炸了,令人郁闷不已。所以自个儿二〇一九年攻读时,将本身老是的小节学习成果实行了commit,我们倘诺某三个小节境遇标题能够与作者的代码举办查看比对,发现自个儿的不当。

课程仓库地址1:
882828九五至尊手机版,https://github.com/mtianyan/DjangoGetStarted
课程仓库地址2:
https://github.com/mtianyan/Mxonline2
课程仓库地址3:
https://github.com/mtianyan/Mxonline3

使用Django+Xadmin创设在线教育平台(Python2,3共用一份教程,未表明的都以一致操作,分裂点笔者会专门提出。):

7-4 课程机构列表页数据体现2

  • Python2.7 + Django1.9.8 对应仓库Mxonline2
  • Python3.x + Django2.0.1 对应仓库Mxonline3

前去html中开始展览多少填充

882828九五至尊手机版 1

mark

能够见见有着城市是因而a标签,当前选中城市为active。

882828九五至尊手机版 2

mark

之后把下部的写死的城池删除掉。

882828九五至尊手机版 3

mark

那时候便是大家在后台添加的数据了

882828九五至尊手机版 4

mark

可以见到各种课程机构都以一个dl

同理使用for循环。

学科仓库地址1:
https://github.com/mtianyan/DjangoGetStarted
学科仓库地址2:
https://github.com/mtianyan/Mxonline2
学科仓库地址3:
https://github.com/mtianyan/Mxonline3

怎样将imageField转换为图片地址

数据库中img存放的是字符串:相对路径

882828九五至尊手机版 5

mark

882828九五至尊手机版 6

mark

上海教室这种取法会取出一个对峙地址。

882828九五至尊手机版 7

mark

将setting中布局的mediaurl放在日前能够补全地址。

体系示范和学科介绍

2018年科目粗糙版(充满bug)演示地址:
http://mxonline.mtianyan.cn
新版还没写完,写完了会计划上线。

  • 首先章:项目介绍和学科介绍

Django是叁个Python中Web开发的主流框架,被许多巨型商厦利用,如谷歌(Google),豆瓣,YouTube,乐乎,instagram:

mark

创业集团喜欢的web框架。严酷根据互连网公司付出流程,写出优雅简练的代码。
稳中求进,细致入微。独立完毕总体项目。学习完科目,找份Python
web开发工作不在话下。

系统介绍:

  • 系统具有完整的用户登录注册以及找回密码成效,拥有完整个人基本。
  • 民用基本:
    修改头像,修改密码,修改邮箱,能够观察本人的教程以及本人的贮藏。能够去除收藏,笔者的消息。
  • 导航栏: 公开课,授课助教,授课机构,全局搜索。
  • 点击公开课–> 课程列表,排序-搜索。热门课程推荐,课程的分页。
  • 点击课程–>
    课程详情页中对学科举行收藏,撤销收藏。富文本浮现课程内容。
  • 点击开始学习–>
    课程的章节信息,课程的评头品足消息。课程能源的下载链接。
  • 点击授课讲师–>授课教师列表页,对助教进行人气排序以及分页,右侧有教师排名榜。
  • 点击讲师的详情页面–>
    对教师举办收藏和分享,以及教授的全方位课程。
  • 导航栏: 授课机构有分页,排序筛选功效。
  • 单位列表页左侧有连忙提交本身要上学的表单。
  • 点击机构–> 左边:机构首页,机构课程,机构介绍,机构助教。
  • 后台管理体系能够切换主题。右侧每三个效应都有列表展现,
    增加和删除改查,筛选功用。
  • 学科列表页可以对不一样字段实行排序。选拔多条记下进行删减操作。
  • 学科列表页:过滤器->采纳字段范围等,搜索,导出csv,xml,json。
  • 学科新增页面上传图片,富文本的编排。时间接选举拔,添加章节,添加课程财富。
  • 日记记录:记录后台人士的操作

学完后还能将本网站改造成电商网站,在线旅游等其余网站

mark

设置media处理器

882828九五至尊手机版 8

mark

882828九五至尊手机版 9

mark

登记之后,mediaurl将能够在html中利用

882828九五至尊手机版 10

mark

图形依然不曾显得。因为url中没有拍卖图片相应路径的url

Django1.9.8 urls.py:

from django.views.static import serve
    # 处理图片显示的url,使用Django自带serve,传入参数告诉它去哪个路径找,我们有配置好的路径MEDIAROOT
    url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT })

882828九五至尊手机版 11

mark

Django2.0.1 urls.py:

from django.views.static import serve
# 处理图片显示的url,使用Django自带serve,传入参数告诉它去哪个路径找,我们有配置好的路径MEDIAROOT
    re_path(r'^media/(?P<path>.*)', serve, {"document_root": MEDIA_ROOT })

支付环境搭建职责

windows下通过pycharmvirtualenv搭建开发条件

到家xadmin的adminx为单位添加分类索引字段

organization/adminx.py

# 机构课程信息管理器
class CourseOrgAdmin(object):
    list_display = ['name', 'desc','category', 'click_nums', 'fav_nums','add_time' ]
    search_fields = ['name', 'desc', 'category','click_nums', 'fav_nums']
    list_filter = ['name', 'desc','category' ,'click_nums', 'fav_nums','city__name','address','add_time']

django基础知识回想职责

照顾基础薄弱同学: 通过留言板功用回想django基础知识。

mark

除去加载小圈圈

static/css/style.css中scrollLoading置为空:

.scrollLoading {
}

做到后台数据增进,列表页数据突显。对应7-3&7-4

数据库设计和xadmin搭建后台管理种类职责

通过业务分析规划django的每个app,设计app下的model。设计外键关系,通过django的migrate设计变更数据表。

下一场将那么些model注册到xadmin当中。为每个model配置搜索,过滤字段,以及列表页的显示字段。配置xadmin的主题选择功能。

后台设计工作

7-5 列表分页作用

github搜索django-pure-pagination

pip install django-pure-pagination

882828九五至尊手机版 12

mark

install app中添加:

'pure_pagination',

可安装参数;

PAGINATION_SETTINGS = {
    'PAGE_RANGE_DISPLAYED': 10,
    'MARGIN_PAGES_DISPLAYED': 2,
    'SHOW_FIRST_PAGE_WHEN_INVALID': True,
}

882828九五至尊手机版 13

mark

PAGE_RANGE_DISPLAYED是总共会呈现多少个page。(包蕴省略号,包罗两边和中等)
MARGIN_PAGES_DISPLAYED是旁边会彰显几个。
SHOW_FIRST_PAGE_WHEN_INVALID:当输入页数非法是不是要跳到第1页

官方实例;

from django.shortcuts import render_to_response

from pure_pagination import Paginator, EmptyPage, PageNotAnInteger

    # 尝试获取页数参数
    try:
        page = request.GET.get('page', 1)
    except PageNotAnInteger:
        page = 1
    # objects是取到的数据
    objects = ['john', 'edward', 'josh', 'frank']

    # Provide Paginator with the request object for complete querystring generation
    # 对于取到的数据进行分页处理。
    p = Paginator(objects, request=request)
    # 此时前台显示的就应该是我们此时获取的第几页的数据
    people = p.page(page)

    return render_to_response('index.html', {
        'people': people,
    }

咱俩比较着的落实:

from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
class OrgView(View):
    def get(self,request):
        # 查找到所有的课程机构
        all_orgs = CourseOrg.objects.all()
        # 总共有多少家机构使用count进行统计
        org_nums = all_orgs.count()
        # 取出所有的城市
        all_city = CityDict.objects.all()
        # 对课程机构进行分页
        # 尝试获取前台get请求传递过来的page参数
        # 如果是不合法的配置参数默认返回第一页
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1
        # 这里指从allorg中取五个出来,每页显示5个
        p = Paginator(all_orgs, 5, request=request)
        orgs = p.page(page)

        return render(request, "org-list.html", {
            "all_orgs":orgs,
            "all_city": all_city,
            "org_nums": org_nums,
        })

系统功效模块完结任务

福寿绵绵全部后台成效 & 面试中平时被提及的web开发文化。

大致拥有的django常用模块:

  • setting配置
  • url配置
  • view书写
  • model设计
  • formmodelform的使用
  • templates模板的施用
  • django常用的放到函数

对此html中分页举办安排

不再是objects,而是objectlist

882828九五至尊手机版 14

mark

应用暗许的render

882828九五至尊手机版 15

mark

882828九五至尊手机版 16

mark

web系统知识以及互连网安兼义务

严防有个别抨击难题:

  • sql注入
  • xss攻击
  • crsf攻击

这个攻击的规律以及防备章程

自定义html的样式

882828九五至尊手机版 17

mark

本小节做到对应commit:

7-3, 4 & 5:完结列表数据呈现列表分页成效:使用pure_pagination

xadmin扩大知识

左右越来越多可定制功用:

  • 权力管理
  • 权限配置
  • 权限,用户,组之间的关系。
  • xadmin常用插件
  • 怎么着自定义xadmin插件
  • xadmin的富文本编辑效率
  • xadmin的excel导入功效。

还会用到有的开源的django开发库。

mark

任凭是想周全学习Django照旧想做一个线上教育平台都得以满足需要。学习完Django,大家对于学习别的框架和经过Django搭建我们同心协力的体系,都会变成很简短的工作。

7-6 分类筛选效率

882828九五至尊手机版 18

mark

当用户点击某二个city时对应丰硕参数city的id

在后台处理那些city

882828九五至尊手机版 19

mark

获得传入的参数进行更为筛选。

882828九五至尊手机版 20

mark

将city_id传回html,使得能够驾驭哪位是选中的。

882828九五至尊手机版 21

mark

因为city.id是后端传回到的值是一个int。所以我们要做类型转换。

882828九五至尊手机版 22

mark

当city_id为空的时候,彰显整个。

后台处理项目

  # 类别筛选
        category = request.GET.get('ct', "")
        if category:
            # 我们就在机构中作进一步筛选类别
            all_orgs = all_orgs.filter(category=category)

回来前台种类值以active

  return render(request, "org-list.html", {
            "all_orgs":orgs,
            "all_city": all_city,
            "org_nums": org_nums,
            "city_id":city_id,
            "category":category,
        })

882828九五至尊手机版 23

mark

对此项目做相同的ifequal判断

882828九五至尊手机版 24

mark

如上海教室所示举行城市与分类的联合浮动:

当采纳一切品类的时候,就只通过当前城市id。
当选拔任何都会的时候,就只通过当前目录id。
当二者都选的时候使用&连接。

刚才计算部门数据过早,应该移到末端后边已经筛选过后,

 # 总共有多少家机构使用count进行统计
        org_nums = all_orgs.count()

课程机构排行

   # 热门机构,如果不加负号会是有小到大。
        hot_orgs = all_orgs.order_by("-click_nums")[:3]

882828九五至尊手机版 25

mark

循环时内置变量forloop.counter取当前轮回到第四回

待完结:点击排行机构的一而再

学科机构排序。

读书人数,课程数

organization/models.py
CourseOrg

 # 当学生点击学习课程,找到所属机构,学习人数加1
    students = models.IntegerField(default=0, verbose_name=u"学习人数")
    # 当发布课程就加1
    course_nums =  models.IntegerField(default=0, verbose_name=u"课程数")

makemigrations organization
migrate organization

前者页面学习人数,添加参数sort

882828九五至尊手机版 26

mark

 # 进行排序
        sort = request.GET.get('sort', "")
        if sort:
            if sort == "students":
                all_orgs = all_orgs.order_by("-students")
            elif sort == "courses":
                all_orgs = all_orgs.order_by("-course_nums")

加上选拔效果

882828九五至尊手机版 27

mark

Your Comments

近期评论

    功能


    网站地图xml地图