django个人笔记(二)——动手写一个项目

1、创建项目

使用pycharm新建项目

选择项目文件夹
选择虚拟环境

----》相关配置见我的django个人笔记(一)https://blog.csdn.net/luo981695830/article/details/99067695

 

2、创建应用,

暂且第一个应用名称叫student

创建应用 python manage.py startapp student

点击项目空白处,就能看见创建好的应用

 

3、配置环境

主要需要配置的地方有四处:应用配置、模板配置、数据库配置、上线配置

以下配置均是在和项目同名的文件下settings.py文件中

应用配置:使用命令手动创建,需要收到添加应用名称,而是使用pycharm创建应用会自动添加

每次手动创建的应用都要手动添加应用名称

django个人笔记(二)——动手写一个项目_第1张图片

模板配置:使用pycharm创建项目,会自动添加好,而使用命令创建项目(django-admin startproject name)

则需要先新建templates文件夹,再手动添加这行代码

django个人笔记(二)——动手写一个项目_第2张图片

数据库配置:这里以mysql为例,具体配置信息如下,可参照

django个人笔记(二)——动手写一个项目_第3张图片

上线配置:

这里第一行是配置页面中文显示,django1.8版本中是zh-CN,更高的版本使用-zh-hans

第二行是设置时区

第五行是是否可调试,在生产环境中选择False,上线后改为True

django个人笔记(二)——动手写一个项目_第4张图片

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文件夹下创建业务逻辑中所需要的静态页面

django个人笔记(二)——动手写一个项目_第5张图片

 

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项目流程完毕,有问题可以页面留言

你可能感兴趣的:(后端)