Ubuntu系统常用开发命令
Django
子命令
django-admin.py和manage.py都是Django的命令工具集
语法:
django-admin
manage.py
subcommand是子命令;options是可选的
1 | 常用子命令: |
startproject
作用:创建Django工程
语法:
1 | django-admin startproject name [项目想要存放的路径] |
startapp
作用:创建Django应用程序
语法:
1 | django-admin startapp name [应用想要存放的路径] |
runserver
作用:在当前机器启动一个Web服务器,运行Django项目
语法:
1 | #默认是8000端口 |
migrations
Django通过migrations命令将Models中的任何修改写入到数库中,比如:新增加的模型或修改已有的字段等。
makemigrations
作用:根据models的变化生成对应的Python代码,该代码用于更新数据库
语法:
1 | python manage.py makemigrations |
migrate
作用:将model里的修改应用到数据库
语法:
1 | python manage.py migrate #默认是所有的APP的修改应用到数据库 |
注意:
如果执行migrate的命令同时给了应用程序的名字和migtrations名字,系统会把数据库恢复到之前指定的一个版本。
1 | python manage.py migrate myblog 0001_initial #指定blog应用恢复到0001_initial 这个版本 |
项目实践
1.创建项目
在代码目录下运行:
1 | $ django-admin startproject projectname |
等效命令
1 | python3 -m django startproject tempsite |
将会在当前目录下创建一个 projectname
目录
startproject创建文件:
1 | tempsite/ |
2.简易服务期(开发用)
运行服务期
1 | $ python manage.py runserver |
更换服务器的监听端口
1 | $ python manage.py runserver 8080 |
修改服务器监听的IP
1 | $ python manage.py runserver 0:8000 |
自动重新加载的服务器:
每一次的访问请求重新载入一遍 Python 代码,不需要为了让修改的代码生效而频繁的重新启动服务器。
添加新文件,将不会触发自动重新加载,需要手动重启服务器。
3.创建应用
manage.py
所在的目录下,运行命令来创建一个应用:
1 | $ python manage.py startapp appname |
上述命令将会创建一个 polls
目录,它的目录结构大致如下:
1 | polls/ |
4.编写视图
打开 polls/views.py
,输入代码:
1 | # polls/views.py |
5.URL映射到视图
如果想看见效果,需要将一个 URL 映射到此视图——这就是需要 URLconf 的原因。
为了创建 URLconf,在 polls 目录里新建一个 urls.py
文件。
1 | polls/ |
在 polls/urls.py
中,输入如下代码:
1 | from django.urls import path |
下一步在根 URLconf 文件中指定创建的 polls.urls
模块。
在 mysite/urls.py
文件的 urlpatterns
列表里插入一个 include()
, 如下:
1 | # mysite/urls.py |
函数 include()
允许引用其它 URLconfs。
每当 Django 遇到 include()
时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。
何时使用 [include()
]
当包括其它 URL 模式时应该总是使用 include()
, admin.site.urls
是唯一例外。
此时已经把 index
视图添加进了 URLconf。
访问 http://localhost:8000/polls/,应该能够看见 “Hello, world. You’re at the polls index.“ ,这是在 index
视图中定义的。
path()函数四参数:
两个必须参数:route
和 view
,两个可选参数:kwargs
和 name
。
route
:
route
是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,会从 urlpatterns
的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/
时,它会尝试匹配 myapp/
。处理请求 https://www.example.com/myapp/?page=3
时,也只会尝试匹配 myapp/
。
view
:
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest
对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。
kwargs
:
任意个关键字参数可以作为一个字典传递给目标视图函数。
name
:
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
6.数据库
使用SQLite数据库不需在使用前做任何事
如果使用 SQLite,那么不需要在使用前做任何事——数据库会在需要的时候自动创建。
如果使用其它数据库(需要确保在使用前已经创建了数据库),配置如下。
6.1数据库配置
mysite/settings.py是包含 Django 项目设置的 Python 模块。
需要安装合适的 database bindings ,改变设置文件中 DATABASES
'default'
项目中的一些键值:
1 | ENGINE -- 可选值有 'django.db.backends.sqlite3','django.db.backends.postgresql','django.db.backends.mysql',或 'django.db.backends.oracle'。 |
1 | $ python manage.py migrate |
migrate
命令检查 INSTALLED_APPS
设置,为其中的每个应用创建需要的数据表。
6.2创建模型
定义模型-数据库结构设计和附加的其它元数据。
编辑 polls/models.py
文件:
1 | from django.db import models |
每个模型被表示为 django.db.models.Model
类的子类。每个模型有许多类变量,都表示模型里的一个数据库字段。
6.3激活模型
首先得把 polls
应用安装到项目里。
为了在工程中包含这个应用,需要在配置类 INSTALLED_APPS
中添加设置。因为 PollsConfig
类写在文件 polls/apps.py
中,所以它的点式路径是 'polls.apps.PollsConfig'
。
在文件 mysite/settings.py
中 INSTALLED_APPS
子项添加点式路径后,如下:
1 | # mysite/settings.py |
现在 Django 项目会包含 polls
应用。
接着运行下面的命令:
1 | $ python manage.py makemigrations polls |
你将会看到类似于下面这样的输出:
1 | Migrations for 'polls': |
再次运行 migrate
命令,在数据库里创建新定义的模型的数据表:
1 | Operations to perform: |
这个 migrate
命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations
来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将对模型的更改同步到数据库结构上。
改变模型三步走
- 编辑
models.py
文件,改变模型。 - 运行
python manage.py makemigrations
为模型的改变生成迁移文件。 - 运行
python manage.py migrate
来应用数据库迁移。
7.管理页面
7.1创建一个管理员账号
1 | $ python manage.py createsuperuser |
键入你想要使用的用户名,然后按下回车键:
1 | Username: admin |
然后提示你输入想要使用的邮件地址:
1 | Email address: admin@example.com |
最后一步是输入密码。你会被要求输入两次密码,第二次的目的是为了确认第一次输入的确实是你想要的密码。
1 | Password: ********** |
7.2后端管理界面
7.3向管理页面加入应用
投票应用在哪呢?没在索引页面里显示。
只需要:得告诉管理,问题 Question
对象需要一个后台接口。
polls/admin.py
编辑:
1 | from django.contrib import admin |
8.编写更多接收参数的视图
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。
在 Django 中,网页和其他内容都是从视图派生而来。每一个视图表现为一个 Python 函数(或者说方法,如果是在基于类的视图里的话)。Django 将会根据用户请求的 URL 来选择使用哪个视图(更准确的说,是根据 URL 中域名之后的部分)。
1 | # polls/views.py |
新视图添加进 polls.urls
模块里,只要添加几个 url()
函数调用就行:
1 | # polls/urls.py |
浏览器转到”/polls/34/“ ,Django 将会运行 detail()
方法并且展示在 URL 里提供的问题 ID。
当请求网站的某一页面时——比如 “/polls/34/“ ,Django 将会载入 mysite.urls
模块,因为这在配置项 ROOT_URLCONF
中设置了。然后 Django 寻找名为 urlpatterns
变量并且按序匹配正则表达式。在找到匹配项 'polls/'
,它切掉了匹配的文本("polls/"
),将剩余文本——"34/"
,发送至 ‘polls.urls’ URLconf 做进一步处理。在这里剩余文本匹配了 '<int:question_id>/'
,使得 Django 以如下形式调用 detail()
:
1 | detail(request=<HttpRequest object>, question_id=34) |
question_id=34
由 <int:question_id>
匹配生成。使用尖括号“捕获”这部分 URL,且以关键字参数的形式发送给视图函数。上述字符串的 :question_id>
部分定义了将被用于区分匹配模式的变量名,而 int:
则是一个转换器决定了应该以什么变量类型匹配这部分的 URL 路径。
9.真正的视图
每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse
对象,或者抛出一个异常,比如 Http404
。其它可自由实现。
视图可以从数据库里读取记录,可以使用一个模板引擎(比如 Django 自带的,或者其他第三方的),可以生成一个 PDF 文件,可以输出一个 XML,创建一个 ZIP 文件,你可以做任何你想做的事,使用任何你想用的 Python 库。
Django 只要求返回的是一个 HttpResponse
,或者抛出一个异常。
页面设计最好不要写死在视图函数中,使用Django模板系统,只需创建一个视图,就可将页面的设计从代码中分离。
默认的设置文件设置了 DjangoTemplates
后端,并将 APP_DIRS
设置成了 True。这一选项将会让 DjangoTemplates
在每个 INSTALLED_APPS
文件夹中寻找 “templates” 子目录。
1 | 模板命名空间: |
例如模板文件:
polls/templates/polls/index.html
1 | {% if latest_question_list %} |
使用polls/views.py中的index视图来使用模板:
1 | # polls/views.py |
快捷函数render()
作用:
「载入模板,填充上下文,再返回由它生成的 HttpResponse
对象」
用Django中render()函数改写polls/views.py:
1 | # polls/views.py |
10.处理404
使用快捷函数 get_object_or_404()
1 | # polls/views.py |
11.使用模板系统
detail()
视图向模板传递了上下文变量 question
。
polls/templates/polls/detail.html
模板里正式的代码:
1 | <h1>{{ question.question_text }}</h1> |
在 {% for %}
循环中发生的函数调用:question.choice_set.all
被解释为 Python 代码 question.choice_set.all()
,将会返回一个可迭代的 Choice
对象,这一对象可以在 {% for %}
标签内部使用。
12.去除模板中的硬编码URL
如下链接是硬编码的:
1 | <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li> |
因为在 polls.urls
的 url()
函数中通过 name 参数为 URL 定义了名字,你可以使用 {% url %}
标签代替它:
1 | <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> |
具有名字 ‘detail’ 的 URL 是在如下语句中定义的:
1 | ... |
13.为URL名称添加命名空间
真实的 Django 项目中肯能有多个应用,Django 如何分辨重名的 URL 呢?(例如多个detail视图)
在根 URLconf 中添加命名空间,在 polls/urls.py
文件中加上 app_name
设置命名空间:
1 | # polls/urls.py |
现在,编辑 polls/index.html
文件,从:
1 | <!-- polls/templates/polls/index.html --> |
修改为指向具有命名空间的详细视图:
1 | <!-- polls/templates/polls/index.html --> |
redis
redis的安装与使用
- 安装、卸载命令
1 | sudo apt-get install redis-server #安装 |
- 启动redis
1 | ps aux|grep redis #查看redis状态 |
redis配置
redis默认配置文件为/etc/redis/redis.conf
1 | Redis监听端口,默认端口为6379 |
redis常用操作
连接redis
1 | redis-cli -h [ip] -p [端口] |
如果已设置密码,就输入密码:
1 | auth 445813 #445813为密码,输入密码前要密码前面加 auth和空格 |
redis键操作命令
1 | #添加 |
Python操作redis
安装 python-redis
1 | pip install redis |
Django操作redis
- Django想要使用redis,需要先安装django-redis
1 | pip3 install django-redis |
settings.py里配置redia
1
2
3
4
5
6
7
8
9
10
11CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379", #服务器地址
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}#最大连接数
# "PASSWORD": "密码",
}
}
}常规redis使用方法
1 | import redis |
发布时间: 2021-03-16
最后更新: 2021-03-31
本文链接: https://juoyo.github.io/posts/9ed9c941.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!