1、基本使用
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path(‘admin/‘, admin.site.urls), path(‘login/‘,views.login) ]
from django.db import models class Userinfo(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=60)
from django.shortcuts import render,HttpResponse from django import forms #导入forms组件 from app01.models import Userinfo #导入要使用的模型 #之前自己定义表单类的字段,现在继承ModelForm后,可以直接将模型生成一个form表单 class UserLoginForm(forms.ModelForm): #定义一个类,要继承 ModelForm password = forms.CharField( #如果模型中的字段不够用,也可以自己定义字段,自己加的字段在生成表单的时候默认会放在最后 widget=forms.widgets.PasswordInput(render_value=True) ) class Meta: model = Userinfo #指定要使用的模型 fields = ‘__all__‘ #要显示哪些字段, ‘__all__‘表示全部显示, 也可以显示一部分:fields = [‘字段1‘,‘字段2‘,‘字段3‘, ...] exclude = [‘password‘] #不显示的字段 def login(request): if request.method == ‘POST‘: userloginform = UserLoginForm(request.POST) userloginform.save() #将提交的form表单数据对应的字段数据保存到数据库中 return HttpResponse(‘保存成功‘) else: userloginform = UserLoginForm() return render(request,‘login.html‘,{‘userloginform‘: userloginform})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> <style></style> </head> <body> <form action="" method="post" novalidate> {% csrf_token %} <div> {{ userloginform.as_p }} {# userloginform.as_p: 将所有的元素渲染在<p>标签中显示 , 同理的还有{{ form.as_table }}和{{ form.as_ul }} #} </div> <div> <input type="submit" value="提交"> </div> </form> </body> </html>
2、使用ModelForm对数据库进行添加、修改和删除
例子:
# models.py from django.db import models from django.utils import timezone class Article(models.Model): title = models.CharField(‘标题‘, max_length=100) text = models.TextField(‘内容‘) date_added = models.DateTimeField(default=timezone.now) def __str__(self): return self.title
# form.py from django.forms import ModelForm from .models import Article class ArticleForm(ModelForm): # 继承ModelForm类 class Meta: model = Article # 具体要操作那个模型 fields = [‘title‘, ‘text‘, ‘date_added‘] # 允许编辑的字段
# views.py from django.shortcuts import render, redirect from .models import Article from .form import ArticleForm def articles(request): # 查询列表页面,获取Article的所有信息 articles = Article.objects.all() return render(request, ‘app1/articles.html‘, {‘articles‘:articles}) # 与其对应的url,在应用中的urls.py中设置 path(‘article/‘, views.articles, name=‘article‘), # 添加页面 def new_article(request): # 如果不是POST方法访问 if request.method != ‘POST‘: # 创建一个空表单在页面显示 form = ArticleForm() else: # 否则为POST方式 # request.POST方法,将会获取到表单中我们输入的数据 new_article = ArticleForm(request.POST) # 验证其合法性,使用is_valid()方法 if new_article.is_valid(): # 验证通过,使用save()方法保存数据 new_article.save() # 保存成功,使用redirect()跳转到指定页面 return redirect(‘app1:article‘) return render(request, ‘app1/new_article.html‘, {‘form‘:form}) # 编辑修改页面 def edit_article(request, article_id): # 查询到指定的数据 article = Article.objects.get(id=article_id) if request.method != ‘POST‘: # 如果不是post,创建一个表单,并用instance=article当前数据填充表单 form = ArticleForm(instance=article) else: # 如果是post,instance=article当前数据填充表单,并用data=request.POST获取到表单里的内容 form = ArticleForm(instance=article, data=request.POST) form.save() # 保存 if form.is_valid(): # 验证 return redirect(‘app1:article‘) # 成功跳转 return render(request, ‘app1/edit_article.html‘, {‘form‘:form,‘article‘:article}) # 删除页面 def del_article(request, article_id): article = Article.objects.get(id=article_id) if request.method == ‘POST‘: article.delete() return redirect(‘app1:article‘) return render(request, ‘app1/del_article.html‘, {‘article‘: article})
# 列表 path(‘article/‘, views.articles, name=‘article‘), # 添加 path(‘new_article/‘, views.new_article, name=‘new_article‘), # 修改 path(‘edit_article/<int:article_id>/‘, views.edit_article, name=‘edit_article‘), # 删除 path(‘del_article/<int:article_id>/‘, views.del_article, name=‘del_article‘),
# articles.html <a href="{% url ‘app1:new_article‘ %}">添加</a> {% for article in articles %} <h1>{{ article.title }}</h1> <p>{{ article.text }}</p> <a href="{% url ‘app1:edit_article‘ article.id %}">修改</a> <a href="{% url ‘app1:del_article‘ article.id %}">删除</a> {% endfor %} # new_article.html <form action="{% url ‘app1:new_article‘ %}" method="post"> {% csrf_token %} {{ form.as_ul }} <input type="submit" value="提交"> </form>
原文:https://www.cnblogs.com/zhangyh-blog/p/15247127.html