django创建app_Django创建项目和基本操作实例

激活django的虚拟环境

activate django

创建项目

django-admin startproject myblog

然后可以在myblog下看到如下目录结构

manage.py
myblog
  __init__.py
  settings.py
  urls.py
  wsgi.py

django-admin下有如下子命令

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

python manege.py 有如下子命令

Available subcommands:

[auth]
    changepassword
    createsuperuser

[contenttypes]
    remove_stale_contenttypes

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

[sessions]
    clearsessions

[staticfiles]
    collectstatic
    findstatic
    runserver

然后我们输入 python manage.py runserver就可以清空项目服务了,输出如下:

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 03, 2019 - 21:52:21
Django version 2.2.1, using settings 'myblog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

在浏览器输入 http://127.0.0.1:8000/ 可以看到默认页面

0f178e4ac18fd1265800766d40f887f0.png

关于目录功能的解释:

  • 外层的myblog/目录与Django无关,只是你项目的容器,可以任意重命名。
  • manage.py:一个命令行工具,用于与Django进行不同方式的交互脚本,非常重要!
  • 内层的myblog/目录是真正的项目文件包裹目录,它的名字是你引用内部文件的包名,例如:myblog/.urls。
  • myblog/__init__.py:一个定义包的空文件。
  • myblog/settings.py:项目的主配置文件,非常重要!
  • myblog/urls.py:路由文件,所有的任务都是从这里开始分配,相当于Django驱动站点的内容表格,非常重要!
  • myblog/wsgi.py:一个基于WSGI的web服务器进入点,提供底层的网络通信功能,通常不用关心。

setting.py中有几个常用配置:

ALLOWED_HOSTS
INSTALLED_APPS
TEMPLATES
DATABASES
STATIC_URL

创建应用 : python manage.py startapp blog

创建应用后,将应用名加入到setting.py 的INSTALLED_APPS中

blog的目录结构如下:

3c562728d58548e1773e961d0652b3da.png

# 应用目录介绍

  • migrations:数据移植(迁移)模块
  • admin.py:当前应用的后台管理系统配置
  • app.py 该应用的一些配置
  • models.py 数据模块 orm模块,处理数据库方面的操作
  • test.py 自动测试模块
  • views.py :执行响应的代码所在模块,很大部分代码都在这里编写。

然后我们在view.py中写入如下代码

from 

然后在url.py中配置好index的url,即可在http://127.0.0.1:8000/index中访问到hello word

from django.contrib import admin
from django.urls import path
import blog.views as bv

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', bv.index),
]

我们可以在app的目录下建一个templates目录,里面放html文件

django按照INSTALLED_APPS中的添加顺序查找templates,名字相同会造成冲突,不同APP下templates目录中的同名.html文件会造成冲突,解决冲突的办法是:在APP的templates目录下创建以APP名为名称的目录,将HTML文件放入新创建的目录下。最后templates的目录结构应该是:templates/appname/index.html

然后在views.py中修改为如下内容,用render()函数将html渲染

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return render(request, 'blog/index.html')

关于url的配置,我们还可以用另一种方式配置:

Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))

在具体的某一个app下面建一个urls.py的文件,比如blog这个app,在urls.py中写

from django.conf.urls import url
from . import views

urlpatterns = [
    url('^index/$', views.index),
]

然后将总项目mybolg下的urls中修改url配置为

from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
    path('blog2/', include('blog2.urls')),
]

然后我们在浏览器中就可以看到相应内容了:

76f7afba05f507a2b8b1d6daf83d736f.png

关于model.py

ORM(object relation mapping):对象关系映射,实现了对象和数据库之间的映射,这样我们就可以不直接使用sql语言去操作数据库了。

1、models.py是一个主要用来创建表的模块,通过创建多个类来创建多个表,每个类就是一个表,比如存放申请信息的一个类、存放黑名单的一个类、实体的一个类等等。类里面定义了这个表有那些字段以及其属性。

2、在models.py定义好所有的类后,需要把这model映射成数据表。在manage.py下执行python manage.py makemigrations app名(可选),如果不写app名则默认为所有app,再执行python manage.py migrate即可映射。其实就是相当于执行sql的建表语句,这个表是空表。

3、建好表后需要往表里面添加数据,知识图谱可能是获取neo4j的。猜测知识图谱的建网逻辑是再neo4j中取出各种类型数据,通过关联等操作得到各种关系的,各种标签的等数据,然后分别存在不同的表中。

4、在表中有数据后,在views.py中可以具体获取默写数据(比如今天的进件),在获取了数据后返回给html,再由html模块渲染展示再前端。

5、猜测知识图谱是由python通过代码的关联逻辑,从neo4j中取出数据存在在表中,再由views.py获取数据返回给html渲染展示。

在models.py中,输入

from django.db import models

# Create your models here.

# 创建字段
class Article(models.Model):
    title = models.CharField(max_length=32,default='Title')
    content= models.TextField(null=True)

然后在命令行执行命令,生成数据表

python manage.py makemigrations [app名字]

python manage.py migrate

自动在app/migrations/目录下生成移植文件

(django) D:1_Codepythonmyblog>python manage.py makemigrations
Migrations for 'blog':
  blogmigrations0001_initial.py
    - Create model Artical

(django) D:1_Codepythonmyblog>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, 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 blog.0001_initial... OK
  Applying sessions.0001_initial... OK

查看SQL语句

python manage.py sqlmigrate 应用名 文件id

(django) D:1_Codepythonmyblog>python manage.py sqlmigrate blog 0001
BEGIN;
--
-- Create model Artical
--
CREATE TABLE "blog_artical" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(32) NOT NULL, "ocntent" text NULL);
COMMIT;

因为我们这里使用了django默认的sqlite3数据库,它会自动生成在根目录下db.sqlite3

33e917e66300891fe73a33081cbbb866.png

然后在页面呈现后台的数据

先在数据库里条件数据

56f7efb3b317e25e3d991127c23f3fe9.png

再修改blog这个app的views.py

from django.shortcuts import render
from django.http import HttpResponse
from . import models

# Create your views here.
def index(request):
    article = models.Article.objects.get(pk=1)
    return render(request, 'blog/index.html',{'article':article})

然后修改templates/blog中的index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<h3>{{ article.content }}</h3>
</body>
</html>

然后我们可以在前台中看到数据

bd30edb089529114031bc7a75d5deee8.png

Admin

Admin是Django自带的一个功能强大的自动化数据管理界面

被授权的用户可直接在Admin中管理数据库

# 配置admin

创建超级用户:python manage.py createsuperuser

入口:localhost:8000/admin/

语言修改:settings.py中LANGUAGE_CODE= 'zh_Hans'

a5a611a881039ae3ca55e3ce0765b357.png

但是这里没有我们添加的Article的管理,我们需要配置一下app下的admin.py

# 配置应用

在应用下admin.py中引入自身的models模块(或里面的模型类)

配置应用在admin中使用 在admin.py中引入models模块

from . import models

再编辑admin.py

admin.site.register(models.Article)

from django.contrib import admin
from . import models

# Register your models here.
admin.site.register(models.Article)

然后就可以看到Article了

b81fbd3fe066151c880a72bf7203cebd.png

ba771b4ce7888cabac700f4846fd9f21.png

71df23d51f47e5519951b0227f95a58c.png

修改数据默认显示名称: 在models的类中定义 __str__(self) ,返回self.title

from django.db import models

# Create your models here.

# 创建字段
class Article(models.Model):
    title = models.CharField(max_length=32,default='Title')
    content = models.TextField(null=True)

    def __str__(self):
        return self.title

3a0a43b7b396b35a33aec6b6bdc8a7eb.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值