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