目录
Redis 高级
复习
服务端查看帮助文档 redis-server --help
杀死redis服务器 sudo skill -9 pid
指定加载的配置文件 sudo redis-server /etc/redis/redis.conf
客户端查看帮助文档 redis-cli --help
运行测试命令 ping
切换数据库 select 10
5中数据格式 string list hash set zset
Django
安装
pip install Django
查看版本
python -m django --version
虚拟环境
为什么要搭建虚拟环境?
问题:如果在一台电脑上,像开发多个不同的项目,需要用到同一个包的不同版本,如果使用上面的命令,在同一个目录下安装或更新,新版本会覆盖以前的版本,其他的项目就无法运行了。
解决方案:虚拟环境
作用:虚拟环境 可以搭建独立的python运行环境,使得单个项目的运行环境与其它项目互不影响。
所有的 虚拟环境 都位于home/下的隐藏目录.virtualenvs下
如何单间虚拟环境?
安装虚拟环境的命令:
sudo pip install virtualenv
sudo pip install virtualenvwrapper
安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:
1.创建目录用来存放虚拟环境
mkdir
$HOME/.virtualenvs
2.打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /user/local/bin/virtualenvwrapper.sh
3.运行
source ~/.bashrc
创建虚拟环境的命令:
提示:如果不指定python版本,默认安装的是python2的虚拟环境
在python2中,创建虚拟环境
linux查看虚拟环境 workon
创建Django项目
步骤
创建Django项目
django-admin startproject name
创建子应用
python manage.py startapp name
运行开发服务器
python manage.py runserver ip:端口
文件目录
settings.py 项目的整体配置文件
urls.py 项目的url配置文件
wsgi.py 项目与wsgi兼容的web服务器入口
manage.py 项目管理文件,通过它管理项目
注册子应用
在工程的settings.py的INSTALLED_APPS里添加子应用的名字
模型
ORM模式面向对象
1.定义模型类
2.模型迁移
2.1生成迁移文件 python manage.py makemigrations
2.2再迁移(会再数据库中生成表)python manage.py migrate
3.操作数据库
(1) 在那里定义模型
(2)模型继承自谁就可以
(3)orm对应的关系 表---》类 字段---》属性 行---》对象
打开settings--》Plugins,安装一个Database Navigator
在model.py写上
from django.db import models
# Create your models here.
class BookInfo(models.Model):
name = models.CharField(max_length=10)
def __str__(self):
return self.name
class PeopleInfo(models.Model):
name = models.CharField(max_length=10)
gender = models.BooleanField()
book = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
执行生成迁移文件,然后再迁移
启动服务器
网址后加/admin即可进入后台
增加后台管理员用户 python manage.py createsuperuser
视图VIEW
1.就是python函数
复习
1.安装django
pip install Django
2.生成django项目
django startproject mysite
使用pycharm重新打开mysite项目
3.启动服务器
python manage.py runserver 0:9000
4.生成子应用
django-admin startapp book
5.注册子应用
在mysite/settings.py的INSTALLED_APPS 写入
book.apps.BookConfig
6.Models
模型类要继承自models.Model
class BookInfo(models.Model):
name = models.CharField(max_length=10)
def __str__(self):
return self.name
表名默认是应用名_类名
修改表名在这个类写
class Mate:
db_table = 'bookinfo'
verbose_name = 'admin' # 后台名
7.迁移数据
python manage.py migrate
python manage.py makemigrations book
8.更改数据库
安装mysql,pip install PyMySQL
在mysite/settings.py的DATABASES的‘ENGINE:
sqlite改成mysql
插入
’HOST':'127.0.0.1',# 主机
'POST':'3306',# 端口号
'USER':'root',# 用户名
'PASSWORD':'mysql',# 密码
’NAME‘:'xxxx',# 指定数据库
在项目的_init__.py里导入
import pymysql
pymysql.install_as_MySQLdb()让mysql作为数据库
9.后台Admin
在book/admin.py写入
from django.contrib import admin
# Register your models here.
from .models import BookInfo
admin.site.register(BookInfo)
创建一个管理员用户
python manage.py createsuperuser
Username:admin
Email address:admin@example.com
Password:
Password(again):
Superuser created successfully.
10.视图
在book/views.py下
from django.http import HttpResponse
from django,shortcuts import render
from book.models import BookInfo
def index(request):
books = BookInfo.objects.all()
context = { 'books': books }
return render(request,'',context)
return HttpResponse('index')
11.路由
打开bookmanager/urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic import RedirectView
from django.conf.urls import url
import book
urlpatterns = [
path('admin/', admin.site.urls),
path(r'', include('book.urls')),
path(r'', include('pay.urls')),
# path('', RedirectView.as_view(url='/projects/')),
]
在book下新建urls.py
from django.conf.urls import url
from django.contrib import admin
from django.urls import path, include
from book.views import index
urlpatterns = [
path(r'index/', index),
path(r'', index),
]
12.数据库增删改查
python manage.py shell
新增数据
方式1
在视图把代码写好,复制粘贴比如:
from book.models import BookInfo
book = BookInfo( name = 'python', pub_date = '2000-01-01')
book.save()
方式2
BookInfo.objects.create(name = 'java' pub_date='2000-01-01')
修改数据(更新数据)
方式1
查询数据
book = BookInfo.objects.get(id = 1)
修数据
book.readcount = 20
数据入库
book.save()
方式2
BookInfo.objects.filter(id=1).update(
readcount = 20,
commentcount = 200,
)
删除
方式1
book = BookInfo.objects.get(id = 1)
book .delete()
方式2
BookInfo.objecats.filter(id =1).delete()
查询
get 得到某一个数据
all 获取所有
count 个数
相当于where查询
filter filter(字段名__运算符=值) 返回N个结果(n = 0/1/n)
get 返回一个结果
exclude 排除掉符合条件剩下的结果 相当于not
运算符
exact 精确的
contains 包含
endswith 以什么结尾
isnull=True 为空
in=[1,2,4] 查询编号1,2,4
gt 是大于
gte 是大于等于
lt 小于
lte 小于等于
F对象的语法形式
from django.db.models import F
filter(字段名__运算符=F('字段名'))
BookInfo.objects.filter(readcount__gte=F('commentcount'))
Q对象
需要查询id大于2,阅读量大于20的书籍
方式1
BookInfo.objects.filter(id__gt=2).filter(readcount__gt=20)
方式2
BookInfo.objects.filter(id__gt=2,readcount__gt=20)
方式3
from django.db.models import Q
BookInfo.objects.filter(Q(id__gt=2)|Q(readcount__gt=20))
聚合函数
Sum,Max,Min,Avg,Count
聚合函数需要使用 aggragte(xxx('字段'))
from django.db.models import aggregate
BookInfo.objects.aggregate(Sum('readcount'))
排序
BookInfo.objects.all().order_by('readcount');升序
BookInfo.objects.all().order_by('-readcount');降序
关联查询、
书籍和人物是一对多,1是主表,多是从表
书籍中没有任何关于人物的字段
人物中有关于书籍的字段 book外键
语法形式
---通过书籍查询人物信息(已知 主表数据,关联查询从表数据)
---主表模型(实例对象),关联模型类名小写_set
查询书籍为1的所有人物信息
book=BookInfo.objects.get(id=1)
book.peopleinfo_set.all()
查询人物为1的书籍信息
people=PeopleInfo.objects.get(id=1)
people.book.name
查询集
all,filter,exclude,order_by
13.模板
1.创建模板
2.设置模板查找路径
3.模板接收视图传入的数据
4.模板处理数据
新增template文件夹下创建.html .css .js
配置相关信息
setting.py的TEMPLATES里配置'DIRS':[os.path.join(BASE_DIR,'template')],
Django官网
Windows下部署
1.安装django
pip install Django
2.生成django项目
django startproject mysite
使用pycharm重新打开mysite项目
3.启动服务器
python manage.py runserver 0:9000
项目与应用
项目和应用之间有什么区别?应用程序是执行某项操作的Web应用程序,例如Weblog系统,公共记录数据库或小型民意调查应用程序。项目是特定网站的配置和应用程序的集合。一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。
4.创建应用polls
python manage.py startapp polls
polls目录布局
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
5.创建一个响应的页面
在polls/urls.py文件里
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index')
]
在主root URLconf mysite/urls.py模块加入polls.urls,
导入模块django.urls.include,
在urlpatterns列表里插入include()
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
什么时候该用include?
除了admin.site.urls以外其他的都使用include
path()函数传递了四个参数,两个是必须的route和view,以及两个可选的kwargs和name。
path()参数:route
route是包含URL模式的字符串。在处理请求时,Django从第一个模式开始,urlpatterns然后沿列表向下移动,
将请求的url与每个模式进行比较,直到找到匹配的url
模式不搜索GET和POST参数或域名。例如,在对的请求中:https://www.example.com/myapp/,URLconf将
寻找myapp/.在请求中http://www.example.com/myapp/?page=3,URLconf也将寻找myapp/.
path()参数:view
当django找到匹配的模式时,他将使用HttpRequest对象作为第一个参数,并将路线中所有‘捕获’的值作为关键字参数来
调用指定的view函数
path()参数:kwargs
可以在字典中将任意关键字参数传递给目标视图。
path()参数:name
命名URL可以使您在django中的其他地方(尤其时在模板内部)明确的引用它。这项强大的功能可让你仅触摸单个文件即可对项目的URL模式进行全局更改。
6.数据库设置
记住进行模型更改的三步指南
- 更改模型(在中
models.py
)。 - 运行为这些更改创建迁移
python manage.py makemigrations
- 运行以将那些更改应用到数据库。
python manage.py migrate
先使用默认数据库sqlite3.
配置文件时mysite/settings.py
编辑时区
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
INSTALLED APPS文件顶部的设置,激活项目中应用程序
默认情况下,INSTALLED_APPS
包含以下应用程序,所有这些应用程序都随Django一起提供:
django.contrib.admin
–管理站点。您将很快使用它。django.contrib.auth
–认证系统。django.contrib.contenttypes
–内容类型的框架。django.contrib.sessions
–会话框架。django.contrib.messages
–消息传递框架。django.contrib.staticfiles
–用于管理静态文件的框架。
创建数据库表
python manage.py migrate
模型
在polls/models创建两个数据库表
from django.db import models
# Create your models here.
class 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)
激活模型
首先我们需要告诉我们的项目该polls
应用程序已安装
要将应用程序包含在我们的项目中,我们需要在设置中添加对其配置类的引用INSTALLED_APPS
。该 PollsConfig
班是在polls/apps.py
文件中,所以它的虚线路径'polls.apps.PollsConfig'
。编辑mysite/settings.py
文件,并将该虚线路径添加到INSTALLED_APPS
设置中。它看起来像这样:
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
现在Django知道包括该polls
应用程序了。让我们运行另一个命令:
python manage.py makemigrations polls
通过运行makemigrations
,您将告诉Django您对模型进行了一些更改(在本例中,您进行了新的更改),并且您希望将更改存储为迁移
迁移是Django将更改存储到模型(以及数据库模式)的方式-它们是磁盘上的文件。如果愿意,您可以阅读新模型的迁移信息。这是文件polls/migrations/0001_initial.py
。不用担心,您不会期望每次Django都读完它们,但是如果您想手动调整Django的更改方式,则可以对它们进行人工编辑。
有一个命令将为您运行迁移并自动管理您的数据库模式-称为migrate
,稍后我们将介绍它-但首先让我们看一下将运行迁移的SQL。该 sqlmigrate
命令采用迁移名称并返回其SQL:
python manage.py sqlmigrate polls 0001
该sqlmigrate
命令实际上并未在数据库上运行迁移-而是将其打印到屏幕上,以便您可以看到Django认为需要的SQL。这对于检查Django将要执行的操作或是否有需要SQL脚本进行更改的数据库管理员很有用。
现在,migrate
再次运行以在数据库中创建那些模型表
python manage.py migrate
这里验证了用py代码插入数据
>>> from polls.models import Choice, Question # Import the model classes we just wrote.
# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>
# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
# Save the object into the database. You have to call save() explicitly.
>>> q.save()
# Now it has an ID.
>>> q.id
1
# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()
# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
<Question: Question object (1)>看不出啥,所以我们修改一下
回到polls/models.py增加个方法
from django.db import models
# Create your models here.
import datetime
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
后台Admin
创建一个管理员用户
python manage.py createsuperuser
Username:admin
Email address:admin@example.com
Password:
Password(again):
Superuser created successfully.
启动开发服务器
python manage.py runserver
把数据库的内容放在admin页中
from django.contrib import admin
from .models import Question
admin.site.register(Question)