Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台
Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台
链接: https://pan.baidu.com/s/1eRpjOB6UKU-enG5urXOEoA 提取码: w5jm
第5章 通过xadmin快速搭建后台管理系统
通过xadmin结合第4章设计的model快速的搭建一套完整的后台管理系统;本章首先介绍django admin的简单使用, 然后引出xadmin,在安装xadmin之后将model注册到xadmin中, 最后完成xadmin的全局配置
权限管理
样式开发
快速开发
后台开发
5-1
setting更改语言.
LANGUAGE_CODE =‘zh-hans’#更改时区TIME_ZONE ='Asia/Shanghai’USE_I18N =TrueUSE_L10N =True#更改为False,否则保存UTC的时间USE_TZ =False
数据库报错,先不管他
5-2
安装xadmin
报错.
去github下载替换readme.rst
压缩zip
pipinstallxadmin.zip
setting设置.
INSTALLED_APPS = [‘django.contrib.admin’,‘django.contrib.auth’,‘django.contrib.contenttypes’,‘django.contrib.sessions’,‘django.contrib.messages’,‘django.contrib.staticfiles’,‘users’,‘courses’,‘operation’,‘organization’,‘xadmin’,‘crispy_forms’]
2.路由界面导入
MxOnline/urls.py
fromdjango.conf.urlsimporturlfromdjango.contribimportadminimportxadminurlpatterns = [ url(r’^xadmin/’, xadmin.site.urls),]
迁移 makemigrations , migrate
5-3
apps/users/adminx.py
* coding: utf-8 _*_author ='lv’date ='2017/11/24 21:16’importxadminfrom.modelsimportEmailVerifyRecord, Banner, UserProfileclassEmailVerifyRecordAdmin(object):list_display = [‘code’,‘email’,‘send_type’,‘send_time’] search_fields = [‘code’,‘email’,‘send_type’] list_filter = [‘code’,‘email’,‘send_type’,‘send_time’] model_icon ='fa fa-address-book-o’classBannerAdmin(object):list_display = [‘title’,‘image’,‘url’,‘index’,‘add_time’] search_fields = [‘title’,‘image’,‘url’,‘index’] list_filter = [‘title’,‘image’,‘url’,‘index’,‘add_time’]xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)xadmin.site.register(Banner, BannerAdmin)
6-1
配置MxOnline/urls
fromdjango.conf.urlsimporturlfromdjango.contribimportadminfromdjango.views.genericimportTemplateViewimportxadminurlpatterns = [ url(r’^xadmin/’, xadmin.site.urls),
把js,image,css,存放的static目录下.
setting更改路径.index更改路径.
STATICFILES_DIRS = ( os.path.join(BASE_DIR,“static”))
6-2
熟练打断点.
crsf掌握
6-7 注册
*配置网页的静态文件
MxOnline/setting
微信截图_20171128122946.png
template/register.html
微信截图_20171128123008.png
验证码框架
微信截图_20171128123524.png
验证码验证
classRegisterForm(forms.Form):email = forms.EmailField(required=True) password = forms.CharField(required=True, min_length=5) captcha = CaptchaField(error_messages={“invalid”:u"验证码错误"})
就是传入浏览器POST请求,表格验证,如果错误就返回错误信息.
6-9 发送邮件验证.
目的:用于发送注册,更改验证码
apps/utils/email_send.py
fromrandomimportRandomfromdjango.core.mailimportsend_mailfromusers.modelsimportEmailVerifyRecordfromMxOnline.settingsimportEMAIL_FROMdefrandom_str(randomlength=8):str =’'chars ='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789’length = len(chars) -1random = Random()foriinrange(randomlength): str+=chars[random.randint(0, length)]returnstrdefsend_register_email(email, send_type=“register”):email_record = EmailVerifyRecord() code = random_str(16) email_record.code = code email_record.email = email email_record.send_type = send_type email_record.save() email_title ="“email_body =”"ifsend_type ==“register”: email_title ="慕学在线网注册激活链接"email_body =“请点击下面的链接激活你的账号: http://127.0.0.1:8000/active/{0}”.format(code) send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])ifsend_status:pass
MxOnline/setting
EMAIL_HOST ="smtp.sina.com"EMAIL_PORT =25EMAIL_HOST_USER ="projectsedu@sina.com"EMAIL_HOST_PASSWORD =“admin123"EMAIL_USE_TLS=FalseEMAIL_FROM ="projectsedu@sina.com”
6-10 测试发送邮件
测试就是在view界面调用了send_register_email(user_name, “register”)
然后我用的QQ邮箱生效了.
6-11 判断用户是否注册了
忘记密码
ForgetPwdView
get 返回网页.
post 如果验证正确,发送邮件,否则提示失败.
7-1模板继承
父模板 {% block title %} dudududu {% endblock %}
子模板
{% ‘base.html’ %}
{% block title %} dadadada {% endblock %}
7-3 机构类别
上传文件地址.
setting配置media,还要配置url
MEDIA_URL = ‘/media/’
MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)
model类lim
python2 defUnicode(self)
python3 defstr(self):
return self.name
7-4
模板显示图片配置图片地址路径要设置setting地址
data-url="{{ MEDIA_URL }}{{ course_org.image }}
TEMPLATES = [ {‘BACKEND’:‘django.template.backends.django.DjangoTemplates’,‘DIRS’: [os.path.join(BASE_DIR,‘templates’)] ,‘APP_DIRS’:True,‘OPTIONS’: {‘context_processors’: [‘django.template.context_processors.debug’,‘django.template.context_processors.request’,‘django.contrib.auth.context_processors.auth’,‘django.contrib.messages.context_processors.messages’,‘django.core.context_processors.media’, ], }, },]
还要在url里设置路径
url(r’^media/(?P.*)$’, serve, {“document_root”: MEDIA_ROOT}),
7-5 分页库
目标:给机构分页
安装分页库
pip install django-pure-pagination
setting添加pure-pagination
微信截图_20171129142254.png
views中写分页
try: page = request.GET.get(‘page’,1)exceptPageNotAnInteger: page =1p = Paginator(all_orgs,5, request=request) orgs = p.page(page)
写模板
{% if all_orgs.has_previous %}上一页{% endif %} {% for page in all_orgs.pages %} {% if page %} {% ifequal page all_orgs.number %}{{ page }}{% else %}
{{ page }}
{% endifequal %} {% else %}…{% endif %} {% endfor %} {% if all_orgs.has_next %}下一页{% endif %}
报错说传入参数不对,是因为我导错包了,应该是pure-pagination我导入django本身的分页了.
7-6
学习人数,可成熟排序
增加字段
students = models.IntegerField(default=0, verbose_name=u"学习人数") course_nums = models.IntegerField(default=0, verbose_name=u"课程数")
7-7
ModelForm
Form会对表单先验证再保存到数据库.
classUserAskForm(forms.Form):name = forms.CharField(max_length=20, verbose_name=u"姓名") mobile = forms.CharField(max_length=11, verbose_name=u"手机") course_name = forms.CharField(max_length=50, verbose_name=u"课程名")
ModelForm可以简写成下面的
classUserAskForm(forms.ModelForm):classMeta:model = UserAsk fields = [‘name’,‘mobile’,‘course_name’]
7-9
开始撒欢听歌对代码编辑.因为都是流水账了,试试自己可以不可以.
就是urls–views–templates
机构主页
urls
url(r’^home/(?P<org_id>\d+)/$’, OrgHomeView.as_view(), name=“org_home”),
views
classOrgHomeView(View):"""
机构首页 """defget(self, request, org_id):# 网页选项卡current_page ="home"# 通过传入机构id查找对应的课程course_org = CourseOrg.objects.get(id=int(org_id))# 增加点击数course_org.click_nums +=1course_org.save() has_fav =False# if request.user.is_authenticated():# if UserFavorite.objects.filter(user=request.user, fav_id=course_org.id, fav_type=2):# has_fav = Trueall_courses = course_org.course_set.all()[:3] all_teachers = course_org.teacher_set.all()[:1]returnrender(request,'org-detail-homepage.html', {'all_courses':all_courses,'all_teachers': all_teachers,'course_org':course_org,'current_page':current_page,'has_fav':has_fav })
templates这里我先编辑org_base.html和org-detail-homepage.html
退出,和用户,其他页面选项卡,还有收藏没有做在html链接更改成#
机构课程
urls
url(r’^course/(?P<org_id>\d+)/$’, OrgCourseView.as_view(), name=“org_ 1ddc3 course”),
views
classOrgCourseView(View):"""
机构课程列表页 """defget(self, request, org_id):current_page ="course"course_org = CourseOrg.objects.get(id=int(org_id)) has_fav =False# if request.user.is_authenticated():# if UserFavorite.objects.filter(user=request.user, fav_id=course_org.id, fav_type=2):# has_fav = Trueall_courses = course_org.course_set.all()returnrender(request,'org-detail-course.html', {'all_courses':all_courses,'course_org':course_org,'current_page':current_page,'has_fav':has_fav })
机构介绍
urls
url(r’^course/(?P<org_id>\d+)/$’, OrgCourseView.as_view(), name=“org_course”),
views
阅读更多- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(13)——xadmin介绍
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(12)——admin介绍
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(5)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(1)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(7)——自定义UserProfile
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(9)——Course models.py的设计
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(10)——Operation models.py的设计
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(15)——xadmin的扩展
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(2)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(4)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(8)——User models.py的设计
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(14)——各个App的adminx.py的设置
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(10)——Organization models.py的设计
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(11)——makemigrations
- 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
- 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击
- 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册