激活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/ 可以看到默认页面
关于目录功能的解释:
- 外层的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的目录结构如下:
# 应用目录介绍
- 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')),
]
然后我们在浏览器中就可以看到相应内容了:
关于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
然后在页面呈现后台的数据
先在数据库里条件数据
再修改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>
然后我们可以在前台中看到数据
Admin
Admin是Django自带的一个功能强大的自动化数据管理界面
被授权的用户可直接在Admin中管理数据库
# 配置admin
创建超级用户:python manage.py createsuperuser
入口:localhost:8000/admin/
语言修改:settings.py中LANGUAGE_CODE= 'zh_Hans'
但是这里没有我们添加的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了
修改数据默认显示名称: 在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