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)
小弟初学python,把自己的理解写为博客,所以博客内容仅供参考。
python之路使用python 3.X版本。
更多内容请关注:http://www.cnblogs.com/binges/