首页 > 其他 > 详细

在线教育平台-授课(11)

时间:2020-05-23 23:08:53      阅读:79      评论:0      收藏:0      [点我收藏+]

log处理问题:

添加机构信息的时候要上传机构的图片

在项目目录下面新建一个目录“media”,用来存放上传的图片

setting中要配置我们把文件存放在哪个根目录之下

#settings.py

# 设置上传文件的路径
MEDIA_URL = ‘/media/‘
MEDIA_ROOT = os.path.join(BASE_DIR,‘media‘)   #指定根目录
上面的media会将image = models.ImageField(‘logo‘,upload_to=‘org/%Y%m‘,max_length=100)的目录连接到一起。
这将会解决前端图片的正确取出。
因为,数据库存储的image路径是相对的:

技术分享图片

 

 

 具体前端实现:

data-url="{{ MEDIA_URL }}{{ course_org.image }}"

要向使用{{ MEDIA_URL }},要先在settings中TEMPLATES 里面添加media处理器:‘django.core.context_processors.media‘

 然后也要添加处理图片相应路径的url

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


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

 

分页功能实现:

使用 分页神器 django-pure-pagination 分页,github上面有介绍使用方法

 (1)安装

pip install django-pure-pagination

(2)settings里面添加

INSTALLED_APPS = (
    ...
    ‘pure_pagination‘,
)

(3)view显示处理

 # 这里指从allorg中取五个出来,每页显示5个
        p = Paginator(all_orgs, 5, request=request)
        orgs = p.page(page)

  

ajax实现异步数据提交

场景:用户咨询

(1)在organazition目录下创建forms.py文件

# organization/forms.py

from django import forms
from operation.models import UserAsk


class UserAskForm(forms.Form):
    ‘‘‘我要咨询‘‘‘
    class Meta:
        model = UserAsk
        fields = [‘name‘,‘mobile‘,‘course_name‘]
复制代码

  

(2)include路由分发

 删掉org_list的那个路由,改成include

path("org/", include(organization.urls, namespace="org")),

使用命名空间防止重复

 然后在organization/urls.py中添加

技术分享图片
# organization/urls.py

from organization.views import OrgView

from django.urls import path,re_path

# 要写上app的名字
app_name = "organization"

urlpatterns = [
    path(list/,OrgView.as_view(),name=org_list),
]

(3)视图函数

技术分享图片
from django.http import HttpResponse
from .forms import UserAskForm


class AddUserAskView(View):
    """
    用户添加咨询
    """
    def post(self, request):
        userask_form = UserAskForm(request.POST)
        if userask_form.is_valid():
            user_ask = userask_form.save(commit=True)
            # 如果保存成功,返回json字符串,后面content type是告诉浏览器返回的数据类型
            return HttpResponse({"status":"success"}, content_type=application/json)
        else:
            # 如果保存失败,返回json字符串,并将form的报错信息通过msg传递到前端
            return HttpResponse({"status":"fail", "msg":"添加出错"}, content_type=application/json)
技术分享图片

(4)配置url

技术分享图片
# organization/urls.py

from organization.views import OrgView,AddUserAskView

from django.urls import path,re_path

# 要写上app的名字
app_name = "organization"

urlpatterns = [
    path(list/,OrgView.as_view(),name=org_list),
    path(add_ask/, AddUserAskView.as_view(), name="add_ask"),
]
技术分享图片

(5)在ModelForm中自定义一个手机号验证的方法

技术分享图片
# organization/forms.py

import re
from django import forms
from operation.models import UserAsk


class UserAskForm(forms.ModelForm):
    class Meta:
        model = UserAsk
        fields = [name, mobile, course_name]
    def clean_mobile(self):
        """
        验证手机号码是否合法
        """
        mobile = self.cleaned_data[mobile]
        REGEX_MOBILE = "^1[358]\d{9}$|^147\d{8}$|176\d{8}$"
        p = re.compile(REGEX_MOBILE)
        if p.match(mobile):
            return mobile
        else:
            raise forms.ValidationError(u"手机号码非法", code="mobile_invalid")
<script>
    $(function () {
        $(#jsStayBtn).on(click, function () {
            $.ajax({
                cache: false,
                type: "POST",
                url: "{% url "org:add_ask" %}",
                data: $(#jsStayForm).serialize(),
                async: true,
                success: function (data) {
                    if (data.status == success) {
                        $(#jsStayForm)[0].reset();
                        alert("提交成功")
                    } else if (data.status == fail) {
                        $(#jsCompanyTips).html(data.msg)
                    }
                },
            });
        });
    })
</script>

 

 

 

 

 

 

技术分享图片
# organization/forms.py

from django import forms
from operation.models import UserAsk


class UserAskForm(forms.Form):
    ‘‘‘我要咨询‘‘‘
    class Meta:
        model = UserAsk
        fields = [name,mobile,course_name]

在线教育平台-授课(11)

原文:https://www.cnblogs.com/topass123/p/12944809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!