美文网首页
(一) Django入门

(一) Django入门

作者: fanhang64 | 来源:发表于2018-03-20 20:54 被阅读24次

    Django

    一. 安装

    (1) 进入终端

    (2) pip install Django==1.11.4

    (3) 安装成功以后, 进入python

    (4) >> import django

    >> django.get_version(); // 获取django的版本号

    二. 创建Django项目

    命令: django-admin startproject 项目名

    实例:

    cd 要创建项目的目录
    >> django-admin startproject project
    

    目录结构:

    |project
    |--project
    |--|--__init__.py  # 一个空文件,告诉 Python 该目录是一个Python包。
    |--|--settings.py  # 对Django 项目的设置/配置。
    |--|--urls.py  # 对用户访问进来的url进行处理
    |--|--wsgi.py  # 运行你的项目的入口
    |--manage.py  # 命令行的工具,与django项目进行交互
    

    三. 启动服务

    命令: python manage.py runserver [ip][端口号]

    实例:

    python manage.py runserver
    # 当提示端口被占用的时候,可以用其它端口:
    python manage.py runserver 8001
    python manage.py runserver 9999
     
    # 监听机器所有可用 ip(电脑可能有多个内网ip或多个外网ip)
    python manage.py runserver 0.0.0.0:8000
    # 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
    # 访问对应的ip加端口,比如 http://172.16.20.2:8000
    

    四. 配置数据库

    (1) 在django项目中找到setting.py中的database的相关配置, 修改如下

    DATABASES = {
        'default': {
            # 'ENGINE': 'django.db.backends.sqlite3',
            # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'python1710',
            'USER': 'fanzone',
            'PASSWORD': '123',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }
    

    (2) 在与项目同名的文件夹下的__init__.py中添加如下代码

    import pymysql
    pymysql.install_as_MySQLdb()
    

    五.创建app

    若django需要使用模型, 就需要去创建app

    命令如下:

    python manage.py startapp app名称
    或 django-admin startapp app名称
    

    实例:

    python manage.py startapp myApp
    

    六. 在models里创建表

    (1) 设计表

    班级表grade

    班级名称 gname
    班级创建时间 gdate
    女生总数 ggirlnum
    男生总数 gboynum
    班级是否被删除 isDelete
    

    学生表students

    姓名 sname
    性别 ssex
    学生年龄 sage
    学生简介 scontented
    是否删除 isDelete
    外键 sgrade
    

    (2) 在models.py文件里创建代码

    # 班级表
    class Grades(models.Model):
        gname = models.CharField(max_length=20)
        gdate = models.DateTimeField()
        ggirlnum = models.IntegerField()
        gboynum = models.IntegerField()
        isDelete = models.BooleanField(default=False)
    # 学生表
    class Students(models.Model):
        sname = models.CharField(max_length=10)
        ssex = models.BooleanField(default=True)
        sage = models.IntegerField()
        scontented = models.CharField(max_length=20)
        isDelete = models.BooleanField(default=False)
        sgrade = models.ForeignKey(Grades)  # 外键
    

    (3) 在setting.py中找到 INSTALL_APPS 将你的app 添加进去

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'myApp',  # 你的项目名称
    ]
    

    (4) 生成迁移文件并创建表结构

    python manage.py makemigrations app名称  # 生成迁移文件
    python manage.py migrate  # 创建表结构
    

    注意: 如果你的models中的类发生了改变 将迁移文件和库中的表删除, 然后在重新执行上述命令

    七. 测试数据库

    (1) 进入python的shell命令

    python manage.py shell
    

    (2) 引入包

    from myApp.models import Grades,Students
    

    (3) 查询数据

    类名.objects.all() # 获取所有数据

    类名.objects.get(pk/id=值) # 获取某条数据

    实例:

    Grades.objects.all()
    Grades.objects.get(pk=1)
    

    (4) 添加数据

    对象 = 类名()

    对象.属性名=值

    对象.save()

    实例:

    g = Grades()
    g.gname = 'python1710'
    g.save()
    

    (5) 修改数据

    对象 = 类名.objects.get(id=值)

    变量.属性名 = 值

    变量.save()

    实例:

    g = Grades.objects.get(id=1)
    g.gname = 'python01'  #  修改班级名称
    g.save()
    

    (6) 数据的删除

    变量 = 类名.objects.get(id=值)

    变量.delete()

    实例:

    g = Grades.objects.get(id=1)
    g.delete()  # 删除
    

    (7) 关联表添加数据

    实例:

    g = Grades.objects.get(id=2)  # 获取班级对象
    s = Students()  # 实例化学生对象
    s.sname='张三'
    s.ssex = 1
    s.sage = 20
    s.scontented = '个人介绍'
    s.sgrade = g  # 关联表
    s.save()
    

    (8) 关联对象查询

    实例:

    g = Grades.objects.get(pk=2)
    g.students_set.all()  # 关联对象查询 查询这个班级的学生人数  注意: students学生类名为小写
    

    八. 配置站点

    (1) 配置admin的应用

    在settings.py文件中, 添加(默认已添加)

    INSTALLED_APPS = [
        'django.contrib.admin',
    ]
    

    (2) 创建管理员用户

    命令:

    python manage.py createsuperuser
    

    依次输入 用户名-> 邮箱-> 密码

    (3) 汉化

    去配置settings.py 找LANGUAGE_CODETIME_ZONE

    LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'Asia/Shanghai'
    

    (4) 管理数据的表

    1. 修改app下的admin.py文件, 注册模型类

    添加如下的代码

    from .models import Grades,Students
    # 注册model类
    admin.site.register(Grades)
    admin.site.register(Students)
    
    2. 配置后台页面的显示问题(自定义后台管理)
    class GradesAdmin(admin.ModelAdmin):
        # 显示字段
        list_display = ['id', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete']
        # 过滤字段-根据gname过滤
        list_filter = ['gname',]
        # 字段的搜索
        search_fields = ['gname',]
        # 分页, 每页显示数据条数
        list_per_page = 5
        # 对数据进行**修改和添加**的时候,改变了属性的顺序(重定义字段顺序, 调整成实际需求的顺序)
        # fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete']
        # 对数据进行**修改和添加**的时候,为字段进行分组 fields 和 fieldsets 不能共同使用
        fieldsets = [('num',{'fields':['ggirlnum','gboynum']}), ('base', {'fields':['gname','gdate','isDelete']})]
    
    
    3. 性别显示问题
    class StudentsAdmin(admin.ModelAdmin):
        # 修改性别男女的方法
        def sex(self):
            if self.ssex:
                return '男'
            else:
                return '女'
        # 修改列名的方法
        sex.short_description = '性别'  # 方法.short_description
        list_display = [
            'id','sname', sex,'sage','scontented','isDelete'  # 添加了sex 方法名
        ]
    
    4. 在创建班级的时候 顺便添加几个学生
    # class StudentsInfo(admin.TabularInline):  # 定义内联对象 横着显示添加学生
    class StudentsInfo(admin.StackedInline):  # 定义内联对象 竖着显示添加学生
        model = Students  # Students类(表)
        extra = 2  # 添加学生默认个数
    class GradesAdmin(admin.ModelAdmin):
        inlines = [StudentsInfo]   # 对内联对象引用
    
    5. 使用装饰器完成注册模型类
    @admin.register(Grades)
    class GradesAdmin(admin.ModelAdmin):
        pass
    @admin.register(Students)
    class StudentsAdmin(admin.ModelAdmin):
        pass
    # admin.site.register(Grades, GradesAdmin)  # 注释掉
    # admin.site.register(Students, StudentsAdmin)
    

    九. 配置控制器-视图(view)

    概述: 在django中视图对web请求进行回应, <u>视图就是一个函数</u> , 位置写在views.py文件中

    (1) 创建一个控制器

    from django.http import HttpResponse
    # 视图/控制器
    def index(request):  
        return HttpResponse('请访问到我了')  # HttpResponse不走模板,直接响应给用户,一般作为调试来用
    

    (2) 配置urls.py的路由

    from myApp import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),  # 新配置的路由
    ]
    

    (3) 控制器(view)请求模板(templates)

    def hello(request):
        return render(request, 'myApp/hello.html')  # 请求在模板下的myApp文件夹下的hello.html
    

    (4) 配置模板路径

    在settings.py文件内的TEMPLATES

    TEMPLATES = [{
            ...
            'DIRS': [BASE_DIR+'/templates'],    # 新配置的模板路径
    

    (5) 学生信息展示

    1. 在控制器(view)里面的代码
    def stuShow(request):
        myDict = {}
        myDict['stu'] = Students.objects.all()
        return render(request, 'myApp/stuShow.html', myDict)
    
    2. 路由的配置
    url(r'stuShow/', views.stuShow),
    
    3. 模板的遍历
    <table border="1" >
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>个人介绍</th>
        </tr>
        {% for stu in stu %}
        <tr>
            <td>{{stu.sname}}</td>
            <td>{{stu.ssex}}</td>
            <td>{{stu.sage}}</td>
            <td>{{stu.scontented}}</td>
        </tr>
        {% endfor %}
    </table>
    

    十. 将url独立出来

    在myApp下创建一个urls.py文件

    实例:

    # 在myApp下创建一个urls.py文件
    from django.conf.urls import url
    from myApp import views
    urlpatterns = [
        url(r'^index/', views.index),
        url(r'hello/', views.hello),
        url(r'send/', views.sendData),
        url(r'addGrade/', views.addGrade),
        url(r'addStudents/', views.addStudents),
        url(r'stuShow/', views.stuShow),
    ]
    # 在项目project里面的urls.py代码如下
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^',include('myApp.urls')),  # include 进来
    ]
    

    相关文章

      网友评论

          本文标题:(一) Django入门

          本文链接:https://www.haomeiwen.com/subject/wlkiqftx.html