Linux下使用django框架
Linux下使用django框架 一、首先安装django框架
python -m django --version
二、在Linux下使用Pycharm创建Django项目
文章图片
三、创建完后项目的目录如下:
文章图片
四、配置启动服务器
点击edit configurations
文章图片
在Host里面输入:
文章图片
Django的开发服务器(以后简称服务器)默认运行在内部的8000端口,如果你想指定端口,请在命令中显示给出:
python manage.py runserver 8080
如果想修改服务器的ip地址,请按下面的方式运行命令:
python manage.py runserver 0.0.0.0:8000
python后需要加上版本号,如:python3.68 manage.py runserver 8080
五、打开Terminal,输入如下命令创建APP:
python manage.py startapp polls
注意:polls为APP的名字,可以自己根据需要修改
创建完目录为:
文章图片
六、编写视图
在目录:polls/views.py中编写如下代码:
from django.http import HttpResponsedef index(request): return HttpResponse("Hello, world. You're at the polls index.")
为了调用该视图,我们还需要编写urlconf,也就是路由路径。现在,在polls目录中新建一个文件,名字为
urls.py
,在其中输入代码如下:from django.conf.urls import url from . import viewsurlpatterns = [ url(r'^$', views.index, name='index'), ]
接下来,在项目的主urls文件中添加
urlpattern
条目,指向我们刚才建立的polls这个app独有的urls文件,这里需要导入include模块。打开djtest/urls.py
文件,代码如下:from django.conf.urls import include, url from django.contrib import adminurlpatterns = [ url(r'^polls/', include('polls.urls')), url(r'^admin/', admin.site.urls), ]
include语法相当于多级路由,它把接收到的url地址去除前面的正则表达式,将剩下的字符串传递给下一级路由进行判断。在路由的章节,有更加详细的用法指导。
include的背后是一种即插即用的思想。项目根路由不关心具体app的路由策略,只管往指定的二级路由转发,实现了应用解耦。app所属的二级路由可以根据自己的需要随意编写,不会和其它的app路由发生冲突。app目录可以放置在任何位置,而不用修改路由。这是软件设计里很常见的一种模式。
建议:除了admin路由外,尽量给每个app设计自己独立的二级路由。
好了,路由设置成功后,启动服务器,然后在浏览器中访问地址
http://localhost:8000/polls/
。一切正常的话,你将看到“Hello, world. You’re at the polls index.”
七、数据库安装 打开
djtest/settings.py
配置文件,这是整个Django项目的设置中心。Django默认使用SQLite数据库,因为Python源生支持SQLite数据库,所以你无须安装任何程序,就可以直接使用它。当然,如果你是在创建一个实际的项目,可以使用类似PostgreSQL的数据库,避免以后数据库迁移的相关问题。如果你想使用其他的数据库,请先安装相应的数据库操作模块,并将settings文件中DATABASES位置的
’default’
的键值进行相应的修改,用于连接你的数据库。其中:- ENGINE(引擎):可以是
django.db.backends.sqlite3
、django.db.backends.postgresql
、django.db.backends.mysql
、django.db.backends.oracle
,当然其它的也行。
- NAME(名称):类似Mysql数据库管理系统中用于保存项目内容的数据库的名字。如果你使用的是默认的SQLite,那么数据库将作为一个文件将存放在你的本地机器内,此时的NAME应该是这个文件的完整绝对路径包括文件名,默认值
os.path.join(BASE_DIR, ’db.sqlite3’)
,将把该文件储存在你的项目目录下。
# mysite/settings.py# Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databasesimport pymysql# 一定要添加这两行!通过pip install pymysql! pymysql.install_as_MySQLdb()DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite', 'HOST': '192.168.1.1', 'USER': 'root', 'PASSWORD': 'pwd', 'PORT': '3306', } }
在修改settings文件时,请顺便将
TIME_ZONE
设置为国内所在的时区Asia/Shanghai
。同时,请注意settings文件中顶部的
INSTALLED_APPS
设置项。它列出了所有的项目中被激活的Django应用(app)。你必须将你自定义的app注册在这里。每个应用可以被多个项目使用,并且可以打包和分发给其他人在他们的项目中使用。默认情况,
INSTALLED_APPS
中会自动包含下列条目,它们都是Django自动生成的:- django.contrib.admin:admin管理后台站点
- django.contrib.auth:身份认证系统
- django.contrib.contenttypes:内容类型框架
- django.contrib.sessions:会话框架
- django.contrib.messages:消息框架
- django.contrib.staticfiles:静态文件管理框架
python manage.py migrate
migrate命令将遍历
INSTALLED_APPS
设置中的所有项目,在数据库中创建对应的表,并打印出每一条动作信息。如果你感兴趣,可以在你的数据库命令行下输入:\dt
(PostgreSQL)、 SHOW TABLES;
(MySQL)或 .schema
(SQLite) 来列出 Django 所创建的表。【Linux下使用django框架】提示:对于极简主义者,你完全可以在INSTALLED_APPS内注释掉任何或者全部的Django提供的通用应用。这样,migrate也不会再创建对应的数据表。
八、创建模型 现在,我们来定义模型model,模型本质上就是数据库表的布局,再附加一些元数据。
Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。Django通过模型,将Python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过Python的代码进行数据库的操作。Django通过ORM对数据库进行操作,奉行代码优先的理念,将Python程序员和数据库管理员进行分工解耦。
在这个简单的投票应用中,我们将创建两个模型:
Question
和Choice
。Question包含一个问题和一个发布日期。Choice包含两个字段:该选项的文本描述和该选项的投票数。每一条Choice都关联到一个Question。这些都是由Python的类来体现,编写的全是Python的代码,不接触任何SQL语句。现在,编辑polls/models.py
文件,具体代码如下:from django.db import modelsclass Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published')class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
上面的代码非常简单明了。每一个类都是
django.db.models.Model
的子类。每一个字段都是Field
类的一个实例,例如用于保存字符数据的CharField和用于保存时间类型的DateTimeField,它们告诉Django每一个字段保存的数据类型。每一个Field实例的名字就是字段的名字(如: question_text 或者 pub_date )。在你的Python代码中会使用这个值,你的数据库也会将这个值作为表的列名。
你也可以在每个Field中使用一个可选的第一位置参数用于提供一个人类可读的字段名,让你的模型更友好,更易读,并且将被作为文档的一部分来增强代码的可读性。
一些Field类必须提供某些特定的参数。例如CharField需要你指定max_length。这不仅是数据库结构的需要,同样也用于数据验证功能。
有必填参数,当然就会有可选参数,比如在votes里我们将其默认值设为0.
最后请注意,我们使用
ForeignKey
定义了一个外键关系。它告诉Django,每一个Choice关联到一个对应的Question(注意要将外键写在‘多’的一方)。Django支持通用的数据关系:一对一,多对一和多对多。九、启用模型 上面的代码看着有点少,其实包含了大量的信息,据此,Django会做下面两件事:
- 创建该app对应的数据库表结构
- 为Question和Choice对象创建基于Python的数据库访问API
要将应用添加到项目中,需要在
INSTALLED_APPS
设置中增加指向该应用的配置文件的链接。对于本例的投票应用,它的配置类文件是polls/apps.py
,路径格式为polls.apps.PollsConfig
。我们需要在INSTALLED_APPS
中,将该路径添加进去:# djtest/settings.pyINSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',
实际上,在多数情况下,我们简写成‘polls’就可以了:
# djtest/settings.pyINSTALLED_APPS = [ 'polls', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
现在Django已经知道你的投票应用的存在了,并把它加入了项目大家庭。
我们需要再运行下一个命令:
python manage.py makemigrations polls
你会看到类似下面的提示:
Migrations for 'polls': polls/migrations/0001_initial.py: - Create model Choice - Create model Question - Add field question to choice
通过运行
makemigrations
命令,相当于告诉Django你对模型有改动,并且你想把这些改动保存为一个“迁移(migration)”。migrations
是Django保存模型修改记录的文件,这些文件保存在磁盘上。在例子中,它就是polls/migrations/0001_initial.py
,你可以打开它看看,里面保存的都是人类可读并且可编辑的内容,方便你随时手动修改。接下来有一个叫做
migrate
的命令将对数据库执行真正的迁移动作。但是在此之前,让我们先看看在migration的时候实际执行的SQL语句是什么。有一个叫做sqlmigrate
的命令可以展示SQL语句,例如:python manage.py sqlmigrate polls 0001
你将会看到如下类似的文本(经过适当的格式调整,方便阅读)
BEGIN; -- -- Create model Choice -- CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL ); -- -- Create model Question -- CREATE TABLE "polls_question" ( "id" serial NOT NULL PRIMARY KEY, "question_text" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL ); -- -- Add field question to choice -- ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL; ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT; CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id"); ALTER TABLE "polls_choice" ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id" FOREIGN KEY ("question_id") REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED; COMMIT;
请注意:
- 实际的输出内容将取决于您使用的数据库会有所不同。上面的是PostgreSQL的输出。
- 表名是自动生成的,通过组合应用名 (polls) 和小写的模型名
question
和choice
。 ( 你可以重写此行为。) - 主键 (IDs) 是自动添加的。( 你也可以重写此行为。)
- 按照惯例,Django 会在外键字段名上附加 "_id" 。 (你仍然可以重写此行为。)
- 生成SQL语句时针对你所使用的数据库,会为你自动处理特定于数据库的字段,例如 auto_increment (MySQL), serial (PostgreSQL), 或integer primary key (SQLite) 。 在引用字段名时也是如此 – 比如使用双引号或单引号。
- 这些SQL命令并没有在你的数据库中实际运行,它只是在屏幕上显示出来,以便让你了解Django真正执行的是什么。
python manage.py check
命令,它将检查项目中的错误,并不实际进行迁移或者链接数据库的操作。现在,我们可以运行migrate命令,在数据库中进行真正的表操作了。
migrations的功能非常强大,允许你随时修改你的模型,而不需要删除或者新建你的数据库或数据表,在不丢失数据的同时,实时动态更新数据库。我们将在后面的章节对此进行深入的阐述,但是现在,只需要记住修改模型时的操作分三步:
- 在models.py中修改模型;
- 运行
python manage.py makemigrations
为改动创建迁移记录; - 运行
python manage.py migrate
,将操作同步到数据库。
10、使用模型的API
python manage.py shell
11、admin后台管理站点 12、视图和模板 M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。
12、1编写视图 下面,打开
polls/views.py
文件,输入下列代码:def detail(request, question_id): return HttpResponse("You're looking at question %s." % question_id)def results(request, question_id): response = "You're looking at the results of question %s." return HttpResponse(response % question_id)def vote(request, question_id): return HttpResponse("You're voting on question %s." % question_id)
转载于:https://www.cnblogs.com/z-l-d/p/10732801.html
推荐阅读
- 开学第一天(下)
- 由浅入深理解AOP
- 【故障公告】周五下午的一次突发故障
- 【译】20个更有效地使用谷歌搜索的技巧
- 生活随笔|好天气下的意外之喜
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- 汇讲-勇于突破