python全栈第二十八天 Django

目录

Redis 高级

复习

Django

安装

虚拟环境

复习

1.安装django

2.生成django项目

3.启动服务器

4.生成子应用

5.注册子应用

6.Models

7.迁移数据

8.更改数据库

9.后台Admin

10.视图

11.路由

12.数据库增删改查

新增数据

修改数据(更新数据)

删除

查询

13.模板

Django官网

Windows下部署

1.安装django

2.生成django项目

3.启动服务器

4.创建应用polls

5.创建一个响应的页面

6.数据库设置

后台Admin


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:[email protected]

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.数据库设置

记住进行模型更改的三步指南

先使用默认数据库sqlite3.

配置文件时mysite/settings.py

编辑时区

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

INSTALLED APPS文件顶部的设置,激活项目中应用程序

默认情况下,INSTALLED_APPS包含以下应用程序,所有这些应用程序都随Django一起提供:

创建数据库表

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:[email protected]

Password:

Password(again):

Superuser created successfully.

启动开发服务器

python manage.py runserver

把数据库的内容放在admin页中

from django.contrib import admin

from .models import Question

admin.site.register(Question)

猜你喜欢

转载自blog.csdn.net/qq_41179365/article/details/111674959