表单渲染方式
以登录页面为例get方式渲染一个form表单
post方式提交数据
自定义

def login(reqeust):
if reqeust.method=="POST":
username =reqeust.POST.get('username')
print(username,'u')
password=reqeust.POST.get('password')
print(password,'p'*120)
user=UserInfo.objects.filter(username=username,password=password)
if user:
reqeust.session['user']=username
return HttpResponse('欢迎登录系统')
else:
return HttpResponse('用户名或密码错误')
return render(reqeust,'login.html',locals())

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"> <script src="/static/jquery-3.2.1.min.js"></script> <script src="/static/bootstrap/js/bootstrap.js"></script> <script src="/static/init_ajax.js"></script> <style> form { margin-top: 100px; } .btn { display: block; margin-left: auto; margin-right: auto; } </style> </head> <body> <div class=""></div> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <form action="/login/" class="center-block" method="post"> {% csrf_token %} <div class="form-group"> <label for="username_id"></label> 用户名:<input type="text" class="form-control" id="username_id" name="username"> </div> <div class="form-group"> <label for="password_id"></label> 密码 :<input type="password" class="form-control" id="password_id" name="password"> </div> <div class="form-group"> <input type="submit" class="btn btn-primary" value="登录"> </div> </form> </div> </div> </div> </body> </html>
form组件
注意:get方式不用form组件渲染可以,但是需要name值与form组件的类字段相同

from django.shortcuts import render,HttpResponse from django import forms from django.forms import widgets from app01.models import * # Create your views here. class Myform(forms.Form): username= forms.CharField(max_length=12, min_length=6, label='用户名', widget=widgets.TextInput(attrs={'class':"form-control", 'id':'user'}) ) pwd=forms.CharField( min_length=6, max_length=12, label='密码', widget=widgets.PasswordInput( attrs={'class':'form-control','id':'pwd'} ) ) gender = forms.ChoiceField( # choices=((1基础, "男"), (2, "女"), (3, "保密")), choices=Sex.objects.all().values_list('id','sex'), label="性别", initial=3, widget=forms.widgets.RadioSelect ) # def __init__(self, *args, **kwargs): # super(Myform,self).__init__(*args,**kwargs) # Account.objects.all().values('id',) def reg(request): error_msg = "" form_obj = Myform() if request.method == "POST": form_obj = Myform(request.POST) if form_obj.is_valid(): username = form_obj.cleaned_data.get("username") # print('username',username) pwd = form_obj.cleaned_data.get("pwd") # print('pwd',pwd) gender =form_obj.cleaned_data.get('gender') # print('gender',gender) Account.objects.create(name=username,pwd=pwd,Tosex_id=gender) return HttpResponse('注册成功') return render(request, "reg_test.html", {"form_obj": form_obj, "error_msg": error_msg})

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"> <title>login</title> <style> .error { color: red; } #center { height: 200px; position: absolute; margin-top: -150px; top: 50%; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-2" id="center"> <form action="" method="post" novalidate> {% csrf_token %} <div class="form-group"> <label for="{{ form_obj.username.id_for_label }}" class=" control-label"> {{ form_obj.username.label }} </label> <div> {{ form_obj.username }} <span class="help-block">{{ form_obj.username.errors.0 }}</span> </div> </div> <div class="form-group"> <label for="{{ form_obj.pwd.id_for_label }}" class="control-label">{{ form_obj.pwd.label }}</label> <div>{{ form_obj.pwd }}</div> <span class="error">{{ form_obj.pwd.errors.0 }}</span> </div> <div class="form-group"> <label for="{{ form_obj.gender.id_for_label }}" class="control-label">{{ form_obj.gender.label }}</label> <div>{{ form_obj.gender }}</div> <span class="error">{{ form_obj.pwd.errors.0 }}</span> </div> <div class="form-group col-lg-offset-4"> <input type="submit" class="btn btn-primary"> <span class="error">{{ error_msg }}</span> </div> </form> <script src="/static/jquery-3.2.1.min.js"></script> <script src="/static/bootstrap/js/bootstrap.js"></script> <script src="/static/init_ajax.js"></script> <script> $(this) </script> </div> </div> </div> </body> </html>
ModelForm

from django.shortcuts import render,HttpResponse,redirect # Create your views here. from django.forms import ModelForm from app01.models import * from django.forms import widgets as wg class Bookform(ModelForm): class Meta: model=Book fields='__all__' widgets={ 'title':wg.TextInput(attrs={'class':'form-control'}), 'price':wg.TextInput(attrs={'class':'form-control'}), 'publisher':wg.Select(attrs={'class':'form-control'}), 'authors':wg.SelectMultiple(attrs={'class':'form-control'}) } class login_form(ModelForm): class Meta: model = UserInfo fields = '__all__' labels={ 'username':'用户名', 'password':'密码' } def login(request): if request.method=="POST": username=request.POST.get('username') password=request.POST.get('password') user=UserInfo.objects.filter(username=username,password=password) if user: return redirect('/index/') form_login=login_form() return render(request,'login.html',locals()) def book_list(request): book_list=Book.objects.all().values('id','title','price','publisher__name','authors__name') # book_list=Book.objects.all() # authors = Author.objects.all() # print(book_list) # book_list(zzzzz)=Book.objects.all() return render(request,'book_list.html',locals()) def add(request): if request.method=='POST': form_post=Bookform(request.POST) if form_post.is_valid(): form_post.save() return redirect('/login/') forms=Bookform() return render(request, 'add.html', locals()) def delete(request,id): Book.objects.filter(pk=id).delete() return redirect('/book_list/') def edit(request,id): edit_book = Book.objects.filter(pk=id).first() if request.method=='POST': form=Bookform(request.POST,instance=edit_book) if form.is_valid(): form.save() formbook=Bookform(instance=edit_book) return render(request,'edit.html',locals())

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"> <style> form{ margin-top: 100px; } </style> </head> <body> <script src="/static/jquery-3.2.1.min.js"></script> <script src="/static/bootstrap/js/bootstrap.js"></script> <script src="/static/init_ajax.js"></script> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <form action="" method="post"> {% csrf_token %} <div class="form-group"> <label for=""></label> {{ form_login.username }} </div> <div class="form-group"> <label for=""></label> {{ form_login.password }} </div> <input type="submit" class="btn btn-primary"> </form> </div> </div> </div> </body> </html>
撸起袖子加油干!!!