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)

 

 

 

posted @ 2020-03-01 20:31  旅行没有终点  阅读(521)  评论(0编辑  收藏  举报