• Django项目部署-01


    1. 安装Python

    下载链接:https://www.python.org/getit/

    我这边下载的是3.6.5的版本的执行版本,安装过程中选择自动安装pip

    2.安装django

    pip install Django==1.11

    3.创建项目

    django-admin startproject project

    4.创建一个应用

    先进入到创建的项目目录下,然后执行

    python manage.py startapp myApp

    目录结构如下:

    django默认使用的数据库为sqlite3数据库,如果需要使用mysql数据库需要修改settings.py文件

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'project20180504',
            'USER':'root',
            'PASSWORD':'root',
            'HOST':'localhost',
            'PORT':'3306',
        }
    }
    ENGINE 表示数据库的引擎名称,
    NAME 为数据库的名称
    USER为数据库的用户名
    PASSWORD为数据库用户名密码
    HOST为IP
    PORT为端口号

    修改完毕后,需要用到mysql还需要在projectmyApp\__init__.py文件中声名
    import pymysql
    pymysql.install_as_MySQLdb()
    如果显示pymysql未安装,可以使用pip install pymsql安装

    我这边安装pymysql时候报错提示需要升级pip到10.0.1
    执行python -m pip install --upgrage pip 即可 。

    创建数据:
    修改myApp下的models.py文件
    #coding=utf-8
    
    from django.db import models
    
    # Create your models here.
    
    class Grades(models.Model):
        gname=models.CharField(max_length=20)
        gdate=models.DateTimeField()
        ggilrnum=models.IntegerField()
        gboynum=models.IntegerField()
        isDelete=models.BooleanField(default=False)
        def __str__(self):
            return self.gname
    
    class Students(models.Model):
        sname=models.CharField(max_length=20)
        sgender=models.BooleanField(default=True)
        sage=models.IntegerField()
        scontend=models.CharField(max_length=20)
        isDelete=models.BooleanField(default=False)
        #关联外键
        sgrade=models.ForeignKey("Grades")
        def __str__(self):
            return self.sname

    定义了一个班级表,包含班级名称,创建日期,女生数目,男士数目,是否删除字段

    定义了一个学生表,包含学生姓名,学生性别,学生年龄,学生介绍,是否删除,所属班级,其中所属班级关联外键 。

    执行

    python manage.py  makemigrations

    将会生成迁移数据,在projectmyAppmigrations001_initial.py文件中会生成如下内容

    # -*- coding: utf-8 -*-
    # Generated by Django 1.11 on 2018-05-04 12:31
    from __future__ import unicode_literals
    
    from django.db import migrations, models
    import django.db.models.deletion
    
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='Grades',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('gname', models.CharField(max_length=20)),
                    ('gdate', models.DateTimeField()),
                    ('ggilrnum', models.IntegerField()),
                    ('gboynum', models.IntegerField()),
                    ('isDelete', models.BooleanField(default=False)),
                ],
            ),
            migrations.CreateModel(
                name='Students',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('sname', models.CharField(max_length=20)),
                    ('sgender', models.BooleanField(default=True)),
                    ('sage', models.IntegerField()),
                    ('scontend', models.CharField(max_length=20)),
                    ('isDelete', models.BooleanField(default=False)),
                    ('sgrade', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='myApp.Grades')),
                ],
            ),
        ]

    此时进入mysql中查看发现表依然不存在,此时需要执行

    python manage.pu migrate

    此时会自动将数据表创建完毕 ,但是此时的数据表中是没用内容的。

    测试数据:

    使用django手动向数据表中增、删、改、查数据

    首先进入python的shell环境中 

    python manage.py shell

    首先导入包

    from myApp.models import Grades,Students
    from django.utils import timezone
    from datetime import *

    执行Grades.objects.all() 命令可以查看Grades中对象,此时为空,那么我们给它创建对象

    grade1=Grades()

    然后给对象的属性赋值

    grade1.gname="python04"
    grade1.gdate=datetime(year=2018,month=5,day=5)
    grade1.ggilrnum=10
    grade1.gboynum=30

    此时对象中已经有数据,但是查询数据表发现表中还是空的,那是因为还需要执行grade1.save()命令将数据保存进去 。

    grade1.save()

    此时新增一个数据已经完成,按照这个方法可以添加多个对象 。

    查询数据:使用如下命令可以查询第一条数据

    Grades.objects.get(pk=1)

    数据表中默认都有个id字段,并且这个字段是自动递增的,pk=1表示第一条记录,如果取所有的,那么使用Grades.objects.all()命令

    但是显示的数据并不是很好看,可以通过修改myApp下的models.py文件的__str__(self)方法来定义输出格式,上面我们已经定义只输出名称,也可以定义输出其他内容 。

    修改数据:

    grade1.gboynum=100
    grade1.save()

    修改男士数目为100,然后保存,会发现数据表中数据已经发生变化

    删除数据:

    grade1.delete()  #物理删除

    启动服务:

    python manage.py runserver

    创建超级用户

    python manage.py createsuperuser

    然后根据提示创建超级用户名密码。

    创建完毕后登陆http://127.0.0.1:8000/admin 可以进入登陆界面

    修改myApp下的admin.py文件:

    #coding=utf-8
    from django.contrib import admin
    
    # Register your models here.
    
    from .models import Grades,Students
    
    # class StudentsInfo()
    
    class GrandesAdmin(admin.ModelAdmin):
        #列表属性
        list_display = ['pk','gname','gdate','ggilrnum','gboynum','isDelete']
        #过滤器
        list_filter =['gname']
        #按字段搜索
        search_fields =['gname']
        #分页
        list_per_page =5
    
        #添加,修改属性
        #添加属性先后顺序
        #fields = ['gname','ggilrnum','gboynum','gdate','isDelete']
        fieldsets = [
            ("num",{"fields":['ggilrnum','gboynum']}),
            ("base",{"fields":['gname','gdate','isDelete']}),
        ]
    
    class StudentsAdmin(admin.ModelAdmin):
        list_display = ['pk','sname','sgrade','sgender','sage','scontend','isDelete']
        list_filter =['sname','sgrade']
        search_fields =['sname']
        list_per_page =10
    
        fields = ['sname','sgrade','sgender','sage','scontend',]
    #注册
    admin.site.register(Grades,GrandesAdmin)
    admin.site.register(Students,StudentsAdmin)

    其中admin.site.register(Grades)和admin.site.register(Students) 可以将班级表和学生表注册进去,在界面上可以查看操作 。

    上面的GrandesAdmin和StudentsAdmin则定义了增加,修改,查看数据的方式 。

    效果如下:

    列表属性,让数据显示存在标题 。

    右边会存在一个过滤器,显示所有的班级名称

    search_fields 会使之出现一个搜索框
    分页属性则是当数据量超过定义的值是将分多页显示 。

    fieldsets 则是将属性分组 。
    fields则可以定义先后顺序,跟fieldsets 不可同时出现 。




     


     
  • 相关阅读:
    2007417 13:01:00 运行时数据结构
    2008515 1:38:00 为受灾的人们祈福,祭那些在地震中离开的人
    200732 19:00:00 一段设置8253芯片的程序
    从实模式到保护模式
    200739 18:01:00 linux界的元老
    2007311 19:11:00 cpu执行第一条指令时情形
    20061127 19:54:00 在你心中有这样的一个人吗? (转)
    linux0.11内存管理——try_to_share()
    2007413 20:46:00 linux0.11之copy_page_tables()函数见解
    POJ1258AgriNet
  • 原文地址:https://www.cnblogs.com/catxjd/p/8994415.html
Copyright © 2020-2023  润新知