django-admin(day1)

1、admin学员信息查看

 

提供一个学员管理系统,有一个前台页面展示现有学员,并供新学员提交申请,一个后台负责处理。

django在渲染前端页面时,会根据settings.py中的APP的顺序查找templates,如果不同的app中含有相同的html文件,则会按顺序进行渲染

 1 # models.py
 2 
 3 from django.db import models
 4 
 5 # Create your models here.
 6 
 7 
 8 class Student(models.Model):
 9     SEX_ITEMS = {
10         (1, ''),
11         (2, ''),
12         (0, '未知'),
13     }
14 
15     STATUS_ITEMS = {
16         (0, '申请'),
17         (1, '通过'),
18         (2, '拒绝'),
19     }
20 
21     name = models.CharField(max_length=128, verbose_name='姓名')
22     sex = models.IntegerField(choices=SEX_ITEMS, verbose_name='性别')
23     profession = models.CharField(max_length=128, verbose_name='职业')
24     email = models.EmailField(verbose_name='邮箱')
25     qq = models.CharField(max_length=128, verbose_name='QQ')
26     phone = models.CharField(max_length=128, verbose_name='电话')
27 
28     status = models.IntegerField(choices=STATUS_ITEMS, default=0, verbose_name='审核状态')
29 
30     create_time = models.DateTimeField(auto_now=True, editable=False, verbose_name='创建时间')
31 
32     def __str__(self):
33         return '<Student: {}>'.format(self.name)
34 
35     class Meta:
36         verbose_name = verbose_name_plural = '学员信息'
models.py

 

 1 # admin.py
 2 
 3 from django.contrib import admin
 4 from .models import Student
 5 
 6 # Register your models here.
 7 
 8 class StudentAdmin(admin.ModelAdmin):
 9     list_display = ('id', 'name', 'sex', 'profession', 'email', 'qq', 'phone', 'status', 'create_time')
10     list_filter = ('sex', 'status', 'create_time')
11     search_fields = ('name', 'profession')
12 
13     fieldsets = (
14         (None, {
15             'fields': (
16                 'name',
17                 ('sex', 'profession'),
18                 ('email', 'qq', 'phone'),
19                 'status'
20             )
21         }),
22     )
23 
24 
25 admin.site.register(Student, StudentAdmin)
admin.py

 

 1 # views.py
 2 
 3 from django.shortcuts import render
 4 from .models import Student
 5 
 6 # Create your views here.
 7 
 8 
 9 def index(request):
10     students = Student.objects.all()
11     return render(request, 'index.html', {'students': students})
views.py

 

在admin,如果数据库表中的字段含有choice参数,Django会自动条用get_status_display方法,所以不用配置

在前端页面中,如果要调用含有choice参数的对象,则要调用get_Field_display方法

 1 {# index.html #}
 2 
 3 <!DOCTYPE html>
 4 <html lang="en">
 5 <head>
 6     <meta charset="UTF-8">
 7     <title>Title</title>
 8 </head>
 9 <body>
10     <h1>学院列表</h1>
11     {% for student in students %}
12         <li>{{ student.name }} - {{ student.get_status_display }}</li>
13     {% endfor %}
14 </body>
15 </html>
index.html

 

2、Form表单

 1 from django import forms
 2 from .models import Student
 3 
 4 # class StudentForm(forms.Form):
 5     # name = forms.CharField(label='姓名', max_length=128)
 6     # sex = forms.ChoiceField(label='性别', choices=Student.SEX_ITEMS)
 7     # profession = forms.CharField(label='职业', max_length=128)
 8     # email = forms.EmailField(label='邮箱', max_length=128)
 9     # qq = forms.CharField(label='QQ', max_length=128)
10     # phone = forms.CharField(label='手机', max_length=128)
11 
12 
13 class StudentForm(forms.ModelForm):
14 
15     def clean_qq(self):
16         cleaned_data = self.cleaned_data['qq']
17         if not cleaned_data.isdigit():
18             raise forms.ValidationError('must be digits')
19         return int(cleaned_data)
20 
21     class Meta:
22         model = Student
23         fields = (
24             'name', 'sex', 'profession', 'email', 'qq', 'phone'
25         )
forms.py

 

 1 from django.shortcuts import render
 2 from django.http import HttpResponseRedirect
 3 from django.urls import reverse
 4 from django.views import View
 5 from .models import Student
 6 from .forms import StudentForm
 7 
 8 # Create your views here.
 9 
10 class IndexView(View):
11 
12     template_name = 'index.html'
13 
14     def get_content(self):
15         students = Student.get_all()
16         context = {
17             'student': students,
18         }
19         return context
20 
21     def get(self,request):
22         context = self.get_content()
23         form = StudentForm()
24         context.update(
25             {
26                 'form': form
27             }
28         )
29         return render(request, self.template_name, context=context)
30 
31     def post(self,request):
32         form = StudentForm(request.POST)
33         if form.is_valid():
34             form.save()
35             return HttpResponseRedirect(reverse('index'))
36 
37         context = self.get_content()
38         context.update(
39             {
40                 'form': form
41             }
42         )
43         return render(request, self.template_name, context=context)
views.py

 

1 from django.conf.urls import url
2 from django.contrib import admin
3 from student.views import IndexView
4 
5 urlpatterns = [
6     url(r'^admin/', admin.site.urls),
7     url(r'^$', IndexView.as_view(), name='index'),
8 ]
urls.py

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <h1>学院列表</h1>
 9     {% for student in students %}
10         <li>{{ student.name }} - {{ student.get_status_display }}</li>
11     {% endfor %}
12 
13     <form action="/" method="post">
14         {% csrf_token %}
15         {{ form }}
16         <input type="submit" value="提交">
17     </form>
18 </body>
19 </html>
index.html

 

转载于:https://www.cnblogs.com/jieranfeng/p/11020357.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值