继上次的内容,我们继续 🚄
1.前端页面
view.py
from django.shortcuts import render # Create your views here. def index(request): words = 'Hi,guys' return render(request, 'index.html', context={'words':words})
定义了函数 index,接受 request 参数(这是对用户发过来的 http 请求的封装)
render 函数顾名思义,即将内容渲染到模版
index.html 就是 templates 模版,Django 会在每个在 settings 里面注册的应用中寻找当前应用的模版,顺序是自上而下,所以这边我们自己手动建立一个 templates 文件夹,并在里面创建 index.html,内容如下:
index.html
<html> <head> <title>学员管理平台-by mufengs</title> </head> <body> 2019 {{ words }} </body> </html>
这边的{{ words }}就是取 view.py 那边 words 的值
urls.py
配置访问路由规则
from django.conf.urls import url from django.contrib import admin from django.urls import path from student_sys.views import index urlpatterns = [ url(r'^$', index, name='index'), path('admin/', admin.site.urls), ]
就会出现下面的输出内容了
2.操作数据库
通过操作数据库,将内容渲染到页面上
修改 view.py
from django.shortcuts import render from .models import Student # Create your views here. def index(request): students = Student.objects.all() return render(request, 'index.html', context={'students':students})
从数据库中取出学员信息,接下来修改我们的模版
<html> <head> <title>学员管理平台-by mufengs</title> </head> <body> <ul> {% for student in students %} <li>{{ student.name }} - {{ student.get_status_display }}</li> {% endfor %} </ul> </body> </html>
这边发现上次文章中的一个问题,注册 app 的时候写错了,所以这边一直报错过不去
RuntimeError: Model class student_sys.models.Student doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS
因为表是空的,所以页面打开是空白的
接下来我们来实现提交功能,创建一个 form.py 和 view.py 同级
from django import forms from .models import Student # 方法一 # class StudentForm(forms.Form): # name = forms.CharField(label='name', max_length=128) # sex = forms.ChoiceField(label='sex', choices=Student.SEX_ITEMS) # profession = forms.CharField(label='profession', max_length=128) # email = forms.EmailField(label='email', max_length=128) # qq = forms.CharField(label='qq', max_length=128) # phone = forms.CharField(label='phone', max_length=128) # # 方法二 class StudentForm(forms.ModelForm): class Meta: model = Student fields = ( 'name', 'sex', 'profession', 'email', 'phone', 'qq' )
这边用了两种方法来实现,很明显第二种方法更方便
加入表单验证
最后的视图部分代码如下
views.py
from django.http import HttpResponseRedirect from django.shortcuts import render from django.urls import reverse from student_sys.form import StudentForm from .models import Student # Create your views here. def index(request): students = Student.get_all() if request.method == 'POST': form = StudentForm(request.POST) if form.is_valid(): # cleaned_data = form.cleaned_data # student = Student() # student.name = cleaned_data['name'] # student.sex = cleaned_data['sex'] # student.email = cleaned_data['email'] # student.profession = cleaned_data['profession'] # student.qq = cleaned_data['qq'] # student.phone = cleaned_data['phone'] # student.save() form.save() return HttpResponseRedirect(reverse('index')) else: form = StudentForm() context = { 'students': students, 'form': form } return render(request, 'index.html', context=context)
模版文件如下
<html> <head> <title>学员管理平台-by mufengs</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> <form action="/" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Submit" /> </form> </body> </html>
又到了最后的效果时间了,曾经有人和我说过,做开发最开心的时候,做出一个功能,是有一种别人理解不了的成就感
当然我不是一个开发,我也没有所谓的成就感,只是兴趣使然,做自己喜欢的事情
后台
前台
今天就搞这些吧,还需要多理解多消化,盲目的跟着书本敲代码,也没多大用处
@lizhongyue248 你那个问题就一个标签的事情,没有那么复杂啊,聊天发不了标签 @88250 ,所以这边顺便给你看下我的
<amp-auto-ads type="adsense" data-ad-client="xxx"> </amp-auto-ads> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="xxx" data-ad-slot="xxx"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script>
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于