• Django测试开发-6-详细步骤新建APP


    详细新建APP过程展示:
    一、新建一个APP

    目录结构:

      1.1 打开一个Terminal

      1.2 输入命令:

    #新建APP
    python3 manage.py startapp my_app

    目录结构如下:

    二、实践简单的页面跳转(通过HttpResponse 来把内容显示到网页上-HelloWorld!)

      2.1  在my_app中views中编写如下代码:

    from django.http import HttpResponse
    
    def index(request):#定义一个函数,第一个参数必须是request
    
        return HttpResponse("Hello Django ! ")

      2.2 在my_app中新建urls.py文件,新加如下代码:

    from django.contrib import admin
    from django.urls import path, re_path
    from django.conf.urls import url,include
    from . import view
    
    urlpatterns = [
        url(r'^$',view.index),
        # re_path('^index/$',view.index,name='index'),
    
    ]

      2.3 在MyDjango工程下的urls中添加如下代码:

    from django.contrib import admin
    from django.urls import path, re_path
    from django.conf.urls import url,include
    
    from my_app.urls import app_name
    from . import view
    from my_app import views
    
    urlpatterns = [
    
        # path('admin/', admin.site.urls),
        #url(r'^admin/', admin.site.urls),
        # url(r'^my_app/',include('my_app.urls', namespace='my_app')),
        url(r'^$',view.index),
        #path('hello/',view.hello),
        #添加这一句,my_app/代表跳转到my_app APP中,views.index是关联对应views.py中的一个函数
        # url(r'^my_app/',views.index),
        url(r'^my_app/', include(('my_app.urls',app_name), namespace="my_app"))
        # re_path('^index/$',view.index,name='index'),
    
    ]

      2.4 启动服务:

    python3 manager.py runserver 127.0.0.1:8000

      2.5 在浏览器中输入:http://127.0.0.1:8000/my_app/index

    三、使用渲染模板的方法来显示内容

      3.1 在my_app的views中添加一下代码:

    from django.http import HttpResponse
    from django.shortcuts import render
    # Create your views here.
    
    
    def index(request):
        
        ctx = {}#定义一个名为ctx的空字典
    
        ctx["msg"] = "World ! "#以键值对方式添加一条数据到字典中
        return render(request,'hello.html',ctx)#把字典作为参数返回

      3.2 在my_app的urls.py中添加如下代码:

    from django.conf.urls import url
    
    from my_app import views
    
    app_name = 'my_app'
    urlpatterns = [
    
        url(r'^index$',views.index),
    
    ]

      3.3 在my_app中添加文件夹views

      3.4 在my_app/views下新建hello.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <h1>hello,{{msg}}</h1>{#取得字典值为msg的vlues,并显示出来#}
    
    </body>
    </html>

      3.5 在MyDjango中的settings.py中BASE_DIR+’/my_app/views’,如下图:

      3.6 在MyDjango的urls.py添加如下代码:

    from django.contrib import admin
    from django.urls import path, re_path
    from django.conf.urls import url,include
    
    from my_app.urls import app_name
    from . import view
    from my_app import views
    
    urlpatterns = [
    
        # path('admin/', admin.site.urls),
        #url(r'^admin/', admin.site.urls),
        # url(r'^my_app/',include('my_app.urls', namespace='my_app')),
        #url(r'^$',view.index),
        #path('hello/',view.hello),
        #添加这一句,my_app/代表跳转到my_app APP中,views.index是关联对应views.py中的一个函数
        # url(r'^my_app/',views.index),
        #因为django2相对于django1做了改动,在include函数里增加了参数app_name,表示app的名字。
        url(r'^my_app/', include(('my_app.urls',app_name), namespace="my_app"))
        # re_path('^index/$',view.index,name='index'),
    
    ]

      3.7 浏览器输入:http://127.0.0.1:8000/my_app/index

    四、 创建数据库,生成数据库表

    Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,
    类中的每个变量代表数据表中的一列字段。Django通过模型,将Python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,
    你同样能通过Python的代码进行数据库的操作。Django通过ORM对数据库进行操作,奉行代码优先的理念,将Python程序员和数据库管理员进行分工解耦

      4.1 修改MyDjango中的settings.py的代码:

    INSTALLED_APPS = [
        'django.contrib.admin',#管理网站
        'django.contrib.auth',#认证模块
        'django.contrib.contenttypes',#内部框架
        'django.contrib.sessions',#会话管理
        'django.contrib.messages',#消息框架
        'django.contrib.staticfiles',#映射的静态资源
        'my_app',#加载到全局中
    ]

     

    DATABASES = {
        'default': {
            'ENGINE':'django.db.backends.mysql',#选择mysql数据库
            'NAME':'my_app',#数据库的名字
            'USER':'root',#mysql数据库的用户名
            'PASSWORD':'123456',#mysql数据库的密码
            'HOST':'127.0.0.1',#mysql数据库的主机名
            'POST':3306,#mysql数据库的端口号(这个可写可不写)
        }
    }

      4.2 在my_app中的models.py中添加如下代码:

    from django.db import models
    
    # Create your models here.
    
    class my_app(models.Model):
    
    
        # 姓名长度为50,不能为空,以下的字段以此类推,但是爱好可以为空
        name = models.CharField('姓名',max_length=50,null=False)
        sex = models.CharField('性别',max_length=2,null=False)
        birth = models.DateField('生日',null=False)
        city = models.CharField('城市',max_length=100,null=False)
        likes = models.CharField('爱好',max_length=50)
    # age = models.IntegerField() #年龄,整型
    # time_stamp = models.DateTimeField() #时间 ,datetime类型

      4.3 打开数据库,新建my_app的数据库

      注意:数据库的名字必须和第1步的settings.py中设置的数据库名字一样!!!

      4.4 检查安装的mysql包的驱动,pip3 list

       4.5 如果未安装,可执行:pip3 install pymysql

       4.6  在项目工程MyDjango下的__init__.py下增加如下代码:(python3仅支持pymysql,不支持MySQLclient)

    import pymysql
    
    pymysql.install_as_MySQLdb()

    五、执行数据库同步

    通过运行makemigrations命令,Django 会检测你对模型文件的修改,也就是告诉Django你对模型有改动,并且你想把这些改动保存为一个“迁移(migration)”。

    migrations是Django保存模型修改记录的文件,这些文件保存在磁盘上。在例子中,它就是hello/migrations/0001_initial.py,你可以打开它看看,里面保存的都是人类可读并且可编辑的内容,方便你随时手动修改。

    .

      5.1 顺序执行如下命令: python3 manage.py makemigrations my_app

    csjinDeMacBook-Pro:MyDjango chushujin$ python3 manage.py makemigrations my_app
    /Users/chushujin/chushujin/myworkspsace/youxinscript/MyDjango
    Migrations for 'my_app':
      my_app/migrations/0001_initial.py
        - Create model my_app

      执行完成之后会生成

      5.2 0001_initial.py中的内容:

    # Generated by Django 3.0.3 on 2020-03-01 12:10
    
    from django.db import migrations, models
    
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='my_app',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('name', models.CharField(max_length=50, verbose_name='姓名')),
                    ('sex', models.CharField(max_length=2, verbose_name='性别')),
                    ('birth', models.DateField(verbose_name='生日')),
                    ('city', models.CharField(max_length=100, verbose_name='城市')),
                    ('likes', models.CharField(max_length=50, verbose_name='爱好')),
                ],
            ),
        ]

      5.3  执行如下命令:python3 manage.py sqlmigrate my_app 0001(生成sql语句)

      migrate的命令将对数据库执行真正的迁移动作

    csjinDeMacBook-Pro:MyDjango chushujin$ python3 manage.py sqlmigrate my_app 0001
    /Users/chushujin/chushujin/myworkspsace/youxinscript/MyDjango
    --
    -- Create model my_app
    --
    CREATE TABLE `my_app_my_app` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(50) NOT NULL, `sex` varchar(2) NOT NULL, `birth` date NOT NULL, `city` varchar(100) NOT NULL, `likes` varchar(50) NOT NULL);

      5.4 最后运行python3 manage.py migrate, 最终在mysql数据库中初步生成表 

    csjinDeMacBook-Pro:MyDjango chushujin$ python3 manage.py migrate
    /Users/chushujin/chushujin/myworkspsace/youxinscript/MyDjango
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, my_app, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying admin.0003_logentry_add_action_flag_choices... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying auth.0009_alter_user_last_name_max_length... OK
      Applying auth.0010_alter_group_name_max_length... OK
      Applying auth.0011_update_proxy_permissions... OK
      Applying my_app.0001_initial... OK
      Applying sessions.0001_initial... OK

    如图:

    my_app_my_app中的字段就是my_app中models.py中添加的字段:

    六、创建超级管理员账户

    6.1 命令窗口输入:python3 manage.py createsuperuser

    csjinDeMacBook-Pro:MyDjango chushujin$ python3 manage.py createsuperuser
    /Users/chushujin/chushujin/myworkspsace/youxinscript/MyDjango
    用户名 (leave blank to use 'chushujin'): root
    电子邮件地址: root@qq.com
    Password: 
    Password (again): 
    密码长度太短。密码必须包含至少 8 个字符。
    这个密码太常见了。
    密码只包含数字。
    Bypass password validation and create user anyway? [y/N]: y
    Superuser created successfully.

     6.2 这时候超级管理员就创建好了,运行项目(http://127.0.0.1:8000/admin

    七、把my_app app添加到Django项目中,并添加数据

    7.1 admin管理系统中没有my_app站点

    7.2 添加APP到Django后台

    from django.contrib import admin
    from . import models
    
    # Register your models here.
    
    admin.site.register(models.my_app)

    如图:

    7.3 新添加的APP显示英文,需要将英文改成中文

    class Meta:
    
    # 设置APP别名
    verbose_name = '我的app'
    verbose_name_plural = '我的APP'
    from django.db import models
    
    # Create your models here.
    
    class my_app(models.Model):
    
        '''
        python3 manage.py makemigrations
        python3 manage.py sqlmigrate my_app 0001
        python3 manage.py migrate
    
        '''
        class Meta:
    
            # 设置APP别名
            verbose_name = '我的app'
            verbose_name_plural = '我的APP项目'
    
        # 姓名长度为50,不能为空,以下的字段以此类推,但是爱好可以为空
        name = models.CharField('姓名',max_length=50,null=False)
        sex = models.CharField('性别',max_length=2,null=False)
        birth = models.DateField('生日',null=False)
        city = models.CharField('城市',max_length=100,null=False)
        likes = models.CharField('爱好',max_length=50)

    然后重新运行项目,在页面就会看到my_app变成中文的中文了

    7.4 添加各字段

     添加成功如图:

    我的APP项目下的内容仍是英文:(原因是没有把项目连接到admin.py)

    需修改:my_app/admin.py

    from django.contrib import admin
    
    # Register your models here.
    from . import models
    #继承ModelAdmin类
    class my_app_admin(admin.ModelAdmin):
    
        list_display = ['name','sex','birth','city','likes']
    
    
    admin.site.register(models.my_app,my_app_admin)

  • 相关阅读:
    jenkins安装
    HTTP协议客户端是如何向服务器发送请求
    接口概念
    fiddler导出har格式转化成yml格式

    双硬盘双系统装错了记录
    chrome的版本和driver版本对应表
    monkey详解
    adb命令熟悉
    cookie、session、token
  • 原文地址:https://www.cnblogs.com/chushujin/p/12391835.html
Copyright © 2020-2023  润新知