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']
posted on 2020-05-23 22:26  topass123  阅读(136)  评论(0编辑  收藏  举报