Django基础(四)

Form表单

Admin

 

 

Django Form表单

django 中的form 一般有两种功能:

  • 输入html
  • 验证用户输入

1,先写一个form

import re
from django import forms
from django.core.exceptions import ValidationError


def mobile_validate(value):
    mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
    if not mobile_re.match(value):
        raise ValidationError('手机号码格式错误')


class PublishForm(forms.Form):

    user_type_choice = (
        (0, u'普通用户'),
        (1, u'高级用户'),
    )

    user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice,
                                                                  attrs={'class': "form-control"}))

    title = forms.CharField(max_length=20,
                            min_length=5,
                            error_messages={'required': u'标题不能为空',
                                            'min_length': u'标题最少为5个字符',
                                            'max_length': u'标题最多为20个字符'},
                            widget=forms.TextInput(attrs={'class': "form-control",
                                                          'placeholder': u'标题5-20个字符'}))

    memo = forms.CharField(required=False,
                           max_length=256,
                           widget=forms.widgets.Textarea(attrs={'class': "form-control no-radius", 'placeholder': u'详细描述', 'rows': 3}))

    phone = forms.CharField(validators=[mobile_validate, ],
                            error_messages={'required': u'手机不能为空'},
                            widget=forms.TextInput(attrs={'class': "form-control",
                                                          'placeholder': u'手机号码'}))

    email = forms.EmailField(required=False,
                            error_messages={'required': u'邮箱不能为空','invalid': u'邮箱格式错误'},
                            widget=forms.TextInput(attrs={'class': "form-control", 'placeholder': u'邮箱'}))

 

写一个视图

def test_form_view(request):
     if request.method == 'POST':
         request_form = PublishForm(request.POST)
         if request_form.is_valid():
             request_dict = request_form.clean()
             print(request_dict)
         return render(request,'test.html', {'pub_form':request_form})
     else:
         pub_form = PublishForm()
         return render(request,'test.html',{'pub_form':pub_form})

 

模板文件:

<div>
    <form method="post" action="{% url 'test_form' %}">{% csrf_token %}

        <div>{{ pub_form.user_type }} {{ pub_form.errors.title }}</div>
        <div>{{ pub_form.title }}</div>
        <div>{{ pub_form.email }}</div>
        <div>{{ pub_form.phone }}</div>
        <div>{{ pub_form.memo }}</div>


        {% if pub_form.errors %}
            {{ pub_form.errors }}
        {% endif %}
        <input type="submit" value="提交">
    </form>

</div>

扩展:ModelForm

在使用Model和Form时,都需要对字段进行定义并指定类型,通过ModeForm则可以省去Form中字段的定义

class AdminModelForm(forms.ModelForm):
       
    class Meta:
        model = models.Admin
        #fields = '__all__'
        fields = ('username', 'email')
           
        widgets = {
            'email' : forms.PasswordInput(attrs={'class':"alex"}),
        }

 

 

Django Admin

Django admin 是django提供的一个后台管理页面,该管理页面提供完善的html和css,可以通过Model创建完数据库表之后,就可以对数据进行增删改查

使用django admin的步鄹:

  • 创建后台管理员
  • 配置url
  • 注册和配置django admin后台管理页面

1,创建后台管理员

      python manage.py createsuperuser

2,配置后台管理url

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

3,注册和配置django admin后台管理页面

(1),在admin 中执行如下配置

from django.contrib import admin
   
from app01 import  models
   
admin.site.register(models.UserType)
admin.site.register(models.UserInfo)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)

(2),设置数据表名称

class UserType(models.Model):
    name = models.CharField(max_length=50)
   
    class Meta:
        verbose_name = '用户类型'
        verbose_name_plural = '用户类型'

(3),自定义页面展示

class UserInfoAdmin(admin.ModelAdmin):
    list_display = ('username', 'password', 'email')
   
   
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)

(4),添加页面搜索过滤等功能

from django.contrib import admin
   
from app01 import  models
   
class UserInfoAdmin(admin.ModelAdmin):
    list_display = ('username', 'password', 'email')
    search_fields = ('username', 'email')
    list_filter = ('username', 'email')
       
   
   
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)
posted @ 2016-05-27 11:53  binges  阅读(180)  评论(0编辑  收藏  举报