当前位置: 首页 > news >正文

网络公关的作用优化网站的方法有哪些

网络公关的作用,优化网站的方法有哪些,北京做网站的公司哪家好,php除了做网站还能做什么首先需要定义一个使用场景: 音乐网站的前端部分可以添加上传歌手的单曲, 这个添加页面就使用django form表单来实现。 目录 数据表内容 歌手表及表模型 单曲表及表模型 演示表单使用 设置路由 创建form.py 视图实例化表单类 模板使用表单对象 表…

首先需要定义一个使用场景:

音乐网站的前端部分可以添加上传歌手的单曲,

这个添加页面就使用django form表单来实现。

目录

数据表内容

歌手表及表模型

单曲表及表模型

演示表单使用

设置路由

创建form.py

视图实例化表单类

模板使用表单对象

表单使用进阶

优化表单类

视图表单使用

总结


数据表内容

下方实现功能时,涉及到一些表的数据操作,所以我把表模型内容粘贴出来。

这样有助于整体理解form使用。

歌手表及表模型

在子应用的models.py中的设定歌手表结构,这里由于在后台有一些功能实现,所以内容较多。

不必过多关注歌手表,因为是单曲添加只是涉及一部分歌手表内容,主要集中在使用单曲表使用。

内容如下:

class BaseModel(models.Model):""" 设置基础模型类 """addtime = models.DateTimeField(auto_now_add=True)updatetime = models.DateTimeField(auto_now=True)class Singler(BaseModel):""" 歌手表模型 """class Meta:verbose_name = '歌手'verbose_name_plural = '歌手'# 正序ordering = ['first_letter']name = models.CharField('姓名',max_length=50,help_text='请输入歌手名称')first_letter = models.CharField(max_length=15, editable=False)# 设置上传位置portrait = models.ImageField('照片',upload_to=upload_save_path,help_text='请上传歌手照片')birthday = models.DateField('生日',default=date.today,help_text='请选择歌手生日',blank=True)height = models.IntegerField('身高(cm)',help_text='请输入歌手身高(cm)',default=0,blank=True)weight = models.IntegerField('体重(kg)',help_text='请输入歌手体重(kg)',default=0,blank=True)constellation = models.CharField('星座',max_length=50,help_text='请输入歌手星座')english_name = models.CharField('英文名',max_length=50,help_text='请输入歌手英文名',default='-')gender = models.IntegerField('性别',help_text='请选择歌手性别',choices=((0, '女'), (1, '男')),default=1)country_name = models.CharField('国籍',max_length=50,help_text='请输入歌手国籍',default='-')# editable=False 后台将不再显示singe_num = models.IntegerField(default=0,editable=False)album_num = models.IntegerField(default=0,editable=False)desc = models.TextField('简介',help_text='请输入歌手简介')def __str__(self):""" 修改返回格式 """return self.name

执行过表迁移后,添加部分数据。

表字段和记录内容如下:

单曲表及表模型

在子应用的models.py中的设定单曲表结构,在这里定义了单曲表所有字段,

一会在添加功能时候,需要实现单曲中这些字段资料的添加。

class Singe(BaseModel):""" 单曲表 """class Meta:verbose_name = '单曲'verbose_name_plural = '单曲'name = models.CharField('单曲名称',max_length=50,help_text='请输入单曲名称',)duration = models.IntegerField(editable=False, default=0)playnum = models.IntegerField(default=0, editable=False)path = models.FileField('歌曲文件',upload_to=upload_save_path,help_text='请上传歌曲',)lyric = models.FileField('歌曲歌词',upload_to=upload_save_path,help_text='请上传歌曲歌词',)# 设置与歌手表关联外键 一对多外键设置在多的模型中singler = models.ForeignKey("Singler",on_delete=models.CASCADE,verbose_name='歌手',help_text='请选择歌手')

执行过表迁移后,添加部分数据。

表字段和记录内容如下:

演示表单使用

传统的表单生成方式是在模板文件中编写HTML代码实现。一个完整的表单主要由4部分组成:提交地址、请求方式、元素控件和提交按钮。提交地址和请求方式由form标签设置,提交按钮具有一定特殊性,不通过django form表单来实现。其他文本框、下拉框、复选框等可由django form表单的元素控件来实现。可以简化表单的实现过程和提高表单的灵活性。

设置路由

在urls.py中设置路由地址。

path('test', views.test, name='test'),

创建form.py

在子项目目录下创建form.py,在其中定义表单类testForm。

名称可以使用charField类型来实现,文件用fileField类型实现。

但是下拉菜单必须使用choiceField类型实现;与表模型类设置有所不同。

内容如下:

from django import forms
from .models import *class SingeForm(forms.Form):name = forms.CharField(max_length=20, label='单曲名称')path = forms.FileField(label='单曲文件')lyric = forms.FileField(label='歌词文件')# 设置下拉菜单names = Singler.objects.all()# 将数据以列表的形式标识,列表元素为元组的格式singers = [(v.id, v.name) for v in names]singer = forms.ChoiceField(label='所属歌手', choices=singers)

视图实例化表单类

视图调用表单并传参给模板。

内容如下:

from .form import *
def test(request):""" 演示form使用 """v = SingeForm()return render(request, 'test/index.html', locals())

模板使用表单对象

在这里需要判断是否有错误返回,没有错误正常显示添加表单。

<!DOCTYPE html>
<html>
<body>
<h2>添加歌手单曲</h2>
{% if v.errors %}<p>操作失败,问题是:{{ v.errors }}</p>
{% else %}{# 表单 #}<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}<table>{{ v }}</table><input type="submit" value="保存"></form>{# 表单 #}
{% endif %}
</body>
</html>

注意:没有填写提交地址,默认提交本路由。

效果:

浏览器访问,展示表单。

表单使用进阶

在表单演示使用基础上,增加对表单参数的验证,数据处理并添加入库。

优化表单类

在原来基础上,增加单曲名称、单曲文件格式、歌词文件格式自定义验证。

自定义必填提示语内容。

内容如下:

from django import forms
from .models import *
from django.core.exceptions import ValidationErrordef check_name(value):if len(value.encode('utf-8')) > 60:raise ValidationError('单曲名称不可超过20个字!')def check_singe(value):path_name = str(value)if not path_name.endswith(".mp3"):raise ValidationError('单曲文件格式为mp3文件!')def check_lyric(value):path_name = str(value)if not path_name.endswith(".lrc"):raise ValidationError('歌词文件格式为lrc文件!')class SingeForm(forms.Form):name = forms.CharField(max_length=20,label='单曲名称',error_messages={'required': '单曲名称不可为空'},validators=[check_name])path = forms.FileField(label='单曲文件',error_messages={'required': '请上传单曲文件'},validators=[check_singe])lyric = forms.FileField(label='歌词文件',error_messages={'required': '请上传歌词文件'},validators=[check_lyric])# 设置下拉菜单names = Singler.objects.all()# 将数据以列表的形式标识,列表元素为元组的格式singers = [(v.id, v.name) for v in names]singer = forms.ChoiceField(label='所属歌手', choices=singers)

视图表单使用

增加文件上传、歌曲时长计算、单曲关联歌手并增加相应歌手单曲数;

如果验证不通过,返回错误信息。

这里通过请求的方法进行判断,如果是GET就把表单显示到模板中。

如果是POST请求,就需要把请求获得的参数传递到form表单中,来实现表单验证数据。

这里需要注意的是:如果有文件上传需要设置模板中表单的enctype="multipart/form-data";

因为请求的文件需要单独的获取,故还要再把文件参数单独传给表单。否则就会提示没有上传文件。

下面就是文件上传,保存到服务器端,获取上传文件路径,拿歌曲路径获取歌曲时长。

然后模型操作:单曲的新增,关联歌手相应记录;最后更新相应歌手单曲数。

内容如下:

from .form import *
from django.http import HttpResponse
import eyed3def test(request):""" 演示form使用 """if request.method == 'GET':v = SingeForm()return render(request, 'test/index.html', locals())else:v = SingeForm(data=request.POST, files=request.FILES)if v.is_valid():singe_path = save_media(request.FILES['path'])# 上传单曲文件singe_path = save_media(request.FILES['path'])# 上传歌词文件lyric_path = save_media(request.FILES['lyric'])# 计算单曲时长duration = get_duration_mp3(singe_path)# 查询歌手singer_id = v.cleaned_data['singer']singerDb = Singler.objects.filter(id=singer_id).first()# 新增单曲singeDb = Singe()singeDb.name = v.cleaned_data['name']singeDb.duration = durationsingeDb.path = singe_pathsingeDb.lyric = lyric_path# 建立关联singeDb.singler = singerDbsingeDb.save()# 歌手增加单曲数singerDb.singe_num = singerDb.singe_num + 1singerDb.save()return HttpResponse('操作成功!')else:# 获取错误信息,并以json格式返回error_msg = v.errors.as_json()return render(request, 'test/index.html', locals())def save_media(file):""" 保存文件到服务器 """path = os.path.join(settings.MEDIA_ROOT, file.name)with open(path, 'wb+') as fp:for info in file.chunks():fp.write(info)return pathdef get_duration_mp3(file_path):""" 获取mp3音频文件时长 """info = eyed3.load(file_path)return int(info.info.time_secs)

效果:

验证不通过:

验证通过:

 

总结

Django的表单功能是通过定义表单类,再由类的实例化生成HTML的表单元素控件,这样可以在模板文件中减少HTML的硬编码。每个HTML的表单元素控件由表单字段来决定。并且可以使用表单来进行服务端验证,把验证内容跟逻辑处理进行分离。

http://www.wangmingla.cn/news/109794.html

相关文章:

  • python发wordpress徐州网页关键词优化
  • 做网站 报价谷歌chrome手机版
  • 17网站一起做网店白沟军事新闻最新消息今天
  • 动态网站作业模板太原做网络推广的公司
  • 小程序免费制作平台教学湖南关键词优化品牌价格
  • 开发软件和做网站的区别徐州网站设计
  • 网站开发岗位思维导图网站权重查询接口
  • 外贸接单网站哪个好用爱站数据官网
  • 网络营销推广的八大核心广州seo公司品牌
  • 网站对联广告图片百度搜索引擎关键词优化
  • 博纳网络科技有限公司长沙建站优化
  • 内蒙古建设协会网站株洲seo优化
  • 《网站建设方案》整站优化方案
  • 桂林旅游几月份去最好seo分析网站
  • 保定网站建设技术支持聊城优化seo
  • 企业网站建设制作多少钱营销推广外包
  • 电脑怎么做网站服务器百度app下载安装 官方
  • 做任务赚钱的网站排行公司网站制作费用
  • 如何写一个自己的网站友情链接有什么用
  • 学生做网站怎么收费自己的品牌怎么做加盟推广
  • 共享虚拟主机做网站够用么2023必考十大时政热点
  • 免费网站推广工具有哪些爱站网络挖掘词
  • 党建网站制作广州王牌seo
  • 如何利用国外网站做自媒体企业qq官方下载
  • 山东超越建设集团网站推广普通话的意义
  • 做网站如何使用数据库我想接app纯注册推广单
  • 网站建设方案书 模板石家庄百度快照优化排名
  • hge网站做微端郑州百度网站优化排名
  • 做公司网站流程国内免费域名注册网站
  • 北京做网站哪家便宜网络营销实训个人总结