1、创建项目
使用pycharm新建项目
选择项目文件夹
选择虚拟环境
----》相关配置见我的django个人笔记(一)https://blog.csdn.net/luo981695830/article/details/99067695
2、创建应用,
暂且第一个应用名称叫student
创建应用 python manage.py startapp student
点击项目空白处,就能看见创建好的应用
3、配置环境
主要需要配置的地方有四处:应用配置、模板配置、数据库配置、上线配置
以下配置均是在和项目同名的文件下settings.py文件中
应用配置:使用命令手动创建,需要收到添加应用名称,而是使用pycharm创建应用会自动添加
每次手动创建的应用都要手动添加应用名称
模板配置:使用pycharm创建项目,会自动添加好,而使用命令创建项目(django-admin startproject name)
则需要先新建templates文件夹,再手动添加这行代码
数据库配置:这里以mysql为例,具体配置信息如下,可参照
上线配置:
这里第一行是配置页面中文显示,django1.8版本中是zh-CN,更高的版本使用-zh-hans
第二行是设置时区
第五行是是否可调试,在生产环境中选择False,上线后改为True
4、创建模型
以student为例
在student文件下有一个models.py文件这里就是创建模型的地方
class StudentInfo(models.Model):
'''
学生信息
学生信息字段:姓名 年龄 性别 添加时间
CharField要给max_length
'''
name = models.CharField(max_length=20,verbose_name='学生姓名')
age = models.IntegerField(default=18,verbose_name='学生年龄')
gender = models.CharField(max_length=6,choices=(('girl','女'),('boy','男')),default='girl',verbose_name='学生性别')
addtime = models.DateTimeField(default=datetime.now,verbose_name='添加时间')
# __str__ 方法 当类被调用时,返回定义的名称
def __str__(self):
return self.name
# 对表名的配置信息
class Meta:
verbose_name = '学生信息'
verbose_name_plural = verbose_name
详细说明参照注释
5、模型迁移
生成数据迁移文件:python manage.py makemigrations
迁移数据:python manage.py migrate
6、路由配置
主路由在项目同名文件夹下 urls.py中配置
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$',index,name='index'),#首页
url(r'^student',include('student.urls',namespace='student'))#主子路由分发
]
子路由在student文件下urls.py中配置
from django.conf.urls import include, url
from .views import student_all,student_update,student_add,student_delete
urlpatterns = [
url(r'^student_all/$',student_all,name='student_all'),
url(r'^student_update/(\d+)/$',student_update,name='student_update'),
url(r'^student_add/$', student_add, name='student_add'),
url(r'^student_delete/(\d+)/$', student_delete, name='student_delete'),
]
7、业务逻辑
在student/views.py中 创建对应的函数,并在函数中编写业务逻辑代码
-------》这里以学生guan'li
from django.shortcuts import render,redirect
from django.core.urlresolvers import reverse
from .models import StudentInfo,StudentId,Ban
# Create your views here.
def index(request):
'''学生信息管理系统首页'''
return render(request,'index.html')
def student_all(request):
'''查看所有学生'''
all_students = StudentInfo.objects.filter()
return render(request,'student_all.html',{
'all_students':all_students
})
def student_add(request):
'''添加学生'''
if request.method == 'GET':
all_bans = Ban.objects.filter()
return render(request,'student_add.html',{
'all_bans':all_bans
})
else:
# POST 请求获取数据
name = request.POST.get('stuname',None)
age = request.POST.get('stuage',None)
gender = request.POST.get('stugender',None)
stuid = request.POST.get('stuid',None)
banid = request.POST.get('stuban',None)
# 创建学生对象
student = StudentInfo()
student.name = name
student.age = age
student.gender = gender
student.ban_id = Ban.objects.filter(banid = banid)[0].id #-----
student.save()
# 创建学号对象
studentid = StudentId()
studentid.stuid = stuid
studentid.student_id=student.id # ------
studentid.save()
# 多表操作时,保存数据使用的是数据库中表的字段 通常是子表对象.关系字段_id = 主表对象.id
# 而在获取主表数据时 通常是 子表对象.关系字段 == 主表对象
return redirect(reverse('student:student_all'))
def student_delete(request,stuid):
'''删除学生'''
# 找到学生对象
student = StudentInfo.objects.filter(id = int(stuid))[0]
# 先删除学号
StudentId.objects.filter(id = student.studentid.stuid).delete()
# 再删除学生
student.delete()
return redirect(reverse('student:student_all'))
def student_update(request,stuid):
'''修改学生'''
if request.method == 'GET':
all_bans = Ban.objects.filter()
student = StudentInfo.objects.filter(id = int(stuid))[0]
return render(request,'student_update.html',{
'all_bans':all_bans,
'student':student
})
else:
name = request.POST.get('stuname',None)
age = request.POST.get('stuage',None)
gender = request.POST.get('stugender',None)
banid = request.POST.get('stuban',None)
stuid = request.POST.get('stuid',None)
student = StudentInfo.objects.filter(id = int(stuid))[0]
student.name=name
student.age=age
student.gender=gender
student.ban_id=Ban.objects.filter(banid=banid)[0].id
student.save()
# 修改说明:这里修改数据 不涉及学号修改 因为这里是直接查找学号信息对象 没有新建对象
# 如果原来没有这个学号信息,查找时会报错
studentid = StudentId.objects.filter(stuid=stuid)[0]
studentid.student_id = student.id
studentid.save()
return redirect(reverse('student:student_all'))
7、创建模板
在templates文件夹下创建业务逻辑中所需要的静态页面
8、模型注册
在student/admin.py将模型注册到后台
from django.contrib import admin
from .models import StudentInfo,StudentId,Ban
# Register your models here.
'''
class StudentInfoAdmin(admin.ModelAdmin):
#配置列表页的字段显示
list_display = ['name','age','gender','add_time']
#配置添加搜索框及搜索字段
search_fields = ['name','age','gender','add_time']
#配置分页显示数据条数
list_per_page = 1
#配置过滤器---->这个非常有用,数据的筛选
list_filter = ['age','gender']
#配置详情页的字段显示以及顺序
fields = ['add_time','name']
admin.site.register(StudentInfo,StudentInfoAdmin)
'''
class StudentInfoAdmin11(admin.ModelAdmin):
# 配置列表页的字段显示
list_display = ['ban','name','age','gender']
# fields = ['name']
search_fields = ['gender']
list_filter = ['age','gender']
class StudentIdAdmin(admin.ModelAdmin):
list_display = ['stuid','student']
class BanAdmin(admin.ModelAdmin):
list_display = ['banid']
admin.site.register(StudentInfo,StudentInfoAdmin11)
admin.site.register(StudentId,StudentIdAdmin)
admin.site.register(Ban,BanAdmin)
说明:
这里的StudentInfoAdmin11,StudentIdAdmin,BanAdmin是规范化书写 ,StudentInfoAdmin11用来测试是否必须使用Admin作为后缀,关于后台注册配置的字段详细说明见注释
9、运行启动
命令启动 : python manage.py runserver
在打开的页面中 显示的是首页
创建后台管理员账号 python manage.py createsuperuser
输入后会出现提示信息 输入账号密码 其他的可以不输入略过
在打开的页面中 输入127.0.0.1:8000/admin
可以进入后台页面,后台相关页面的显示参照第8点进行配置
至此,一个完成的django项目流程完毕,有问题可以页面留言