python django框架反向生成页面表单

1.定义forms.py文件

forms.py文件中主要编写的就是页面表单,通过调用forms的不同方法来生成不同的input标签

from django import forms
from student.models import student


class MyDateInput(forms.DateInput): #这里主要是为了使用input标签其中的date,自己手动编写的type
    input_type = 'date'


class ConcatForm(forms.Form):
    tel = forms.CharField(label="电话",max_length=20)
    qq = forms.CharField(label="QQ号",max_length=50)
    email = forms.EmailField(label="邮箱")
    isWai = forms.BooleanField(label="外籍",initial=True) # 默认复选框
    rolename = forms.ChoiceField(choices=(("政治家","政治家"),("群众","群众")),widget=forms.RadioSelect,label="政治面貌")
    aihao = forms.ChoiceField(label="爱好",choices=(("体育","体育"),("音乐","音乐"),("美术","美术"),("游戏","游戏")),widget=forms.CheckboxSelectMultiple)
    city = forms.ChoiceField(label="城市",choices=(("北京","北京"),("纽约","纽约")))
    createDate = forms.DateField(label="注册时间",widget=MyDateInput)
    img = forms.FileField(label="头像")


class StudentForm(forms.ModelForm):
    SEX_CHOICES = (
        ('男','男'),
        ('女','女'),
    )
    LIKES_CHOICES = (
        ("体育", "体育"),
        ("音乐", "音乐"),
        ("美术", "美术"),
        ("游戏", "游戏"),
    )
    name = forms.CharField(label="姓名")
    sex = forms.ChoiceField(label="性别",choices=SEX_CHOICES,widget=forms.RadioSelect)
    likes = forms.MultipleChoiceField(label="爱好",choices=LIKES_CHOICES,widget=forms.CheckboxSelectMultiple)
    imgPath = forms.FileField(label="头像")


    class Meta:
        model = student
        fields = '__all__'


2.编写view.py文件

这样就完成了对于forms中代码的编写,接下来需要在view.py文件中,将这里的东西已值的方式传入页面中,然后就可以使用了。

def addStudent2(request):
    if request.method == "GET" :
        form = StudentForm
        grades=Grade.objects.all()
        return render(request,"addStudent2.html",{"form":form})
    else:
        stu = Student()
        form = StudentForm(request.POST,request.FILES,instance=stu)
        if form.is_valid():
            form.save()
            print(stu.imgPath)
            return redirect(reverse("showStudent", args=[stu.id]))
        else:
            return render(request, "addStudent2.html", {"form": form})


is_valid()方法就是验证表单是否合法,.save()方法可以直接把数据保存到数据库。 

这样就完成了反向生成页面表单的步骤。

3.文件上传

文件上传:
            form.FileField() 手动处理
            model.FileField(upload_to) 这个用在自动保存上传文件
            上传时ModelForm中必须传入request.FILES
            上传路径的设置
                   MEDIA_ROOT = os.path.join(BASE_DIR,"upload")
                   MEDIA_URL = '/upload/'

配置urls.py文件

urlpatterns = [

url(r'^admin/', admin.site.urls),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

将文件表单后加上

ENCTYPE="multipart/form-data"


将model.py文件中文件的代码改为

imgPath = models.FileField(verbose_name='头像', null=True, upload_to='student')

之后就可以进行文件上传了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值