django入门到精通⑨forms表单的使用
django入门到精通⑨forms表单的使用
(python37_django2) D:\python\django_imooc_xiaobai\python manager.py startproject forms
(python37_django2) D:\python\django_imooc_xiaobai\python manager.py startapp app
1.创建forms数据库
MariaDB [(none)]> create database forms;
setttings.py 添加数据库配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'forms', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306' } }
定义models
app/models.py
# coding:utf-8 from django.db import models class Auth(models.Model): username = models.CharField(max_length=18) password = models.CharField(max_length=18) def __ser__(self): return 'username:{}'.format(self.username)
同步数据库
(python37_django2) D:\python\django_imooc_xiaobai\form>python manage.py makemigrations
(python37_django2) D:\python\django_imooc_xiaobai\form>python manage.py migrate
2.前端注册页面
templates/regist.html
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>regist</title> </head> <body> <form action="{% url 'regist' %}" method="POST"> {% csrf_token %} {% for item in form %} <label for="{{ item.id_for_label }}">{{ item.label }}</label> {{ item }} <p>{{ item.errors.as_text }}</p> {% endfor %} <span>{{ form.not_field_errors.as_text }}</span> <br> <!-- <label>用户名</label><input type="text" name="username" placeholder="用户名"> <br/> <label>密码</label><input type="password" name="password" placeholder="密码"> <br/> --> <input type="submit" value="提交"> </form> </body> </html>
3.定义app/forms 对字段进行验证
app/forms.py
# _*_ coding:utf-8 _*_ # __author__ == 'jack' # __date__ == '2021-01-19 8:51 PM' from django import forms from django.forms import fields from .models import Auth as AuthModel class AuthModelForm(forms.ModelForm): class Meta: model = AuthModel fields = ['username', 'password'] exclude = [] field_classes = { 'username': forms.CharField, 'password': forms.CharField } labels = { 'username': '用户名', 'password': '密码' } widgets = { 'username': forms.TextInput( attrs = {'placeholder':'请输入用户名'} ), 'password': forms.PasswordInput( attrs={'placeholder': '请输入密码'}, render_value=True ) } error_messages = { 'username': {'required': '用户名不可以为空'}, 'password': {'min_length': '最少不能小于3个字符'} } class Auth(forms.Form): username = fields.CharField( max_length=18, min_length=3, required=True, label="用户名", widget=forms.TextInput(attrs={'placeholder':'最大不可超过18字符'}), error_messages={'max_length': '最大不能超过18个字符'} ) password = fields.CharField( widget=forms.PasswordInput, label="密码", required=True, min_length=10, error_messages={'min_length': '最小不能低于10个字符'} ) def clean(self): password = self.cleaned_data.get('password','') if not password: raise forms.ValidationError('密码不能为空') def clean_username(self): username = self.cleaned_data.get('username', '') if not username: raise forms.ValidationError('用户名不能为空') if len(username) > 10: raise forms.ValidationError('用户名长度不能超过10') return username
4.路由的定义
app/urls.py
# _*_ coding:utf-8 _*_ # __author__ == 'jack' # __date__ == '2021-01-19 8:30 PM' from django.urls import path from .views import Regist urlpatterns = [ path('regist', Regist.as_view(), name='regist') ]
总路由
form/urls.py
from django.contrib import admin from django.urls import path, include from app import urls as app_urls urlpatterns = [ path('admin/', admin.site.urls), path('', include(app_urls)), ]
5.视图的定义
app/views.py
# coding:utf-8 from django.shortcuts import render,redirect from django.views.generic import View from .forms import Auth from .forms import AuthModelForm class Regist(View): TEMPLATE = "regist.html" def get(self, request): form = Auth() return render(request,self.TEMPLATE, {'form':form}) def post(self, request): # username = request.POST.get('username') # password = request.POST.get('password') # form = Auth(request.POST) form = AuthModelForm(request.POST) if form.is_valid(): # username = form['username'] # password = form['password'] username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') print("username = ", username) print("password = ", password) form.save() else: return render(request, self.TEMPLATE, {'form':form}) return redirect("/regist")
测试
json和str之间的格式转换
In [1]: import json
In [2]: data={"name":"jack","age":30}
In [3]: str(data)
Out[3]: "{'name': 'jack', 'age': 30}"
In [4]: res = json.dumps(data)
In [5]: res
# 可以看到json格式{} 里面是 " " 双引号
Out[5]: '{"name": "jack", "age": 30}'
In [6]: json.loads(res)
Out[6]: {'name': 'jack', 'age': 30}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律