学员管理系统前台开发
1.首页开发
在student/views.py文件编写以下代码
from django.shortcuts import render def index(request): words='World!' return render(request,'index.html',context={'words':words})#使用render来渲染页面,index.html是模板文件,在student目录下创建templates文件夹,该文件夹是Django在渲染页面时默认查找的
django在渲染模板或静态页面时,会去每个app下查找(就是setting.py文件中配置的INSTALLED_APPS中的APP,django会去这些APP的目录下的templates文件夹查找在render上用到的模板,并且是顺序查找)
在student目录下创建完temlates文件夹后,创建index.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学员管理系统</title> </head> <body> Hello {{ words }}! </body> </html>
{{ words }}是django模板语法,意思是从上下文获取到words变量,该变量是在index中调用render传递
模板路径需要在setttings.py配置,具体见报错解决。
然后配置urls.py
from django.contrib import admin from django.urls import path from student.views import index urlpatterns = [ path('admin/', admin.site.urls), path('index/',index), ]
访问http://127.0.0.1:8000/index即可看到hello world!
2.输出数据
修改views.py
from django.shortcuts import render from .models import Student def index(request): students=Student.objects.all()#拿到Student模型中的所有student 数据 return render(request ,'index.html',context={'students':students})
修改index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学员管理系统</title> </head> <body> <ul> {% for student in students %} <li>{{ student.name }}-{{ student.get_status_display }}</li> {% endfor %} </ul> </body> </html>
其中student,get_status.display是因为status设置的是choices字段,Django会提供该方法来获取这个字段对应要展示的值
3.提交数据
创建一个跟view.py 同级的forms.py文件
from django import forms from .models import Student class StudentForm(forms.ModelForm): def clean_qq(self):#Form会自动调用来处理每个字段(检验qq) cleand_data=self.clean_data['qq']#clean_data是从前端拿到的数据 if not cleand_data.isdigit(): raise forms.ValidationError('必须是数字!') return int(cleand_data) class Meta: model=Student fields={ 'name','sex','profession','email','qq','phone'#这些字段和Student里的字段一样,直接复用Student里的代码 }
views.py
from django.shortcuts import render from .models import Student from .forms import StudentForm def index(request): students=Student.objects.all()#拿到Student模型中的所有student 数据 if request.method=='POST': form =StudentForm(request.POST) if form.is_valid():#检验其是否是有效的对象 form.save()#根据用户提交的表单创建Student对象 else: form =StudentForm() context={ 'students':students, 'form':form, } return render(request,'index.html',context=context)
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学员管理系统</title> </head> <body> <h3><a href="/admin/">admin</a></h3> <ul> {% for student in students %} <li>{{ student.name }}-{{ student.get_status_display }}</li> {% endfor %} </ul> <hr/> <form action="/" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Submit"/> </form> </body> </html>
其中{%csrf_token%}是django对提交数据安全性做的校验,如没有则提交的数据无效