topass123

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\']

分类:

技术点:

相关文章: