Django初步学习(一)
Django初步学习(一)
一 Django的简介
Django是一款基于Python开源web框架,采用了MTV(Model,Template,View)设计模式。
二 Django的安装与卸载
1、成功安装Python,检查命令:python -V
(在cmd中输入)
2、成功安装pip,检查命令:pip -V
(在cmd中输入)
3、安装Django,在cmd中输入命令:
pip install Django==版本号 -i 镜像地址 镜像名
pip install Django==2.2.6 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
4、检查Django是否成功安装,在cmd中,输入pip list
5、Django的卸载,在cmd中,输入pip uninstall django
三 Django的初步使用
3.1 创建一个Django项目
1、进入cmd,进入到自定义文件夹,输入以下命令即可创建一个Django项目:
之后称,最外层项目包project_test,为外层项目包
django-admin startproject 工程名
django-admin startproject project_test
2、在自定义文件夹中可以看到project_test项目包(外层项目包):
之后称,外层项目包中与项目名同名的project_test包,为内层项目包
# project_test包内一个 manage.py文件 和 内层项目包
manage.py文件: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互
# 内层项目包 里面我们可以查看到的目录结构
__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
settings.py: 该 Django 项目的设置/配置
urls.py: 该 Django 项目的 URL 声明; 这是项目的根路由。
wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目
3、内层项目包 中的 settings.py 项目配置文件
这个配置文件用于配置和管理Django项目的运维信息
settings.py配置文件中的所有配置项都是大写的,项目创建时,就初始化了一些默认配置,这些默认配置承载着最基础的项目信息:
DATABASES :数据库配置
TEMPLATES:配置HTML页面的模板地址templates
STATICFILES_DIRS :配置静态文件
MIDDLEWARE :配置中间件
DEBUG:默认为True,项目上线时改为False
ALLOWED_HOSTS:限定请求中的host值(?)
4、内层项目包 中的 urls.py 路由系统
Django路由系统的作用,是使views中,处理数据的函数与请求的url建立映射关系。
内层项目包 下的 urls.py 是该工程的根路由
请求到来之后,根据urls.py里的关系条目,查找到与请求对应的处理方法,从而返回数据给客户端http页面。如图:
5、测试项目
打开cmd,移动到外层项目包中,运行以下命令
python manage.py runserver 端口号
python manage.py runserver 8000
访问网址:http://127.0.0.1:8000/,访问成功即项目创建成功
3.2 创建一个应用程序与视图
3.2.1 视图的概念
3.2.2 创建应用程序与视图
1、在外层项目包中,运行下面命令,创建firstapp应用
python manage.py startapp 应用名称
python manage.py startapp firstapp
2、在内层项目包中的settings.py中注册firstapp的信息,即在其INSTALLED_APPS列表中,添加firstapp,
。(可以编辑器编辑)
3、为firstapp创建一个视图,即在firstapp的view.py文件中编写一个对请求的响应函数,如下:
from django.http import HttpResponse #从Django框架中导入HttpResponse函数
def index(request): #定义函数index,request为约定名,可为其他
return HttpResponse("Hello world!")
4、为firstapp创建urls.py,并输入以下代码,以便形成映射(?):
from django.urls import path,re_path #从Django中导入path与re_path方法
from firstapp import views #从firstapp中导入views
urlpatterns = [
re_path('', views.index, name='index'), #各参数的意义
#... 其他的路由规则
]
5、在内层项目包的urls.py中,指定firstapp:
#根路由
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls), # path匹配的是字符串
path('', include(('firstapp.urls', 'firstapp'), namespace='firstapp')), # namespace是命名空间
#... 其他的路由规则
]
6、测试firstapp是否成功,在外层项目包中启动项目:py manage.py runserver 8000
;在浏览器中打开网址:https://127.0.0.1:8000。
3.3 创建模型
3.3.1 模型的概念
3.3.2 创建模型
1、在firstapp的models.py中,创建Person模型:
from django.db import models
class Person(models.Model): #类名首字母应当大写。模型继承django.db.models.Model。
firest_name=models.CharField(max_length=30)
last_name=models.CharField(max_length=30)
class Meta:
db_table="person" #定义模型类在数据库中生成的表单的名字。
#first_name 和 last_name是模型的字段。
#每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。
#CharField表示定义的字段类型为字符串。
#max_length表示字段的最大长度。
3.4 Django关联MySQL数据库
1、用pip安装mysqlclient(mysqlclient是在 Python3.x 版本中用于连接 MySQL 服务器的一个库)
pip install mysqlclient
使用pip list
可查看是否安装成功
2、在内层项目包的settings.py中配置DATABASES:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'firstapp', #原名称:os.path.join(BASE_DIR, 'db.sqlite3')
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
3、在外层项目包中,生成迁移文件:
py manage.py makemigrations
生成迁移文件后,运行下面指令,在数据库中生成与Person模型对应的表
py manage.py migrate
3.5 模型属性
3.5.1 模型属性的概念
objects是类的一个属性。
objects是Manager类型的对象,用于与数据库进行交互,称之为管理器对象。
当定义的模型没有指定管理器对象,系统会默认创建一个名为objects的属性作为管理器对象。
3.5.2 模型属性的自定义
1、首先,自定义一个继承models.Manager的管理类,代码中重写get_queryset方法对数据进行了过滤。代码如下:
class StudentManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(isDelete=False)
2、然后自定义管理器对象:
book=StudentManager()
一旦自定义管理器对象,默认的objects就不再自动生成。可以用自定义的管理器对象代替他。
objects一般是通过 “类名.objects” 的方法使用
3.6 创建对象
3.6.1 对象的定义
创建对象就是根据模型中定义的类创建一个实例对象,这个对象拥有实际的属性值。
当创建对象时,Django不会与数据库进行交互,调用save()方法时才与数据库进行交互,将对象保存到数据库中。
创建对象的方法有多种,最简单的方法是在类中自定义一个类方法创建对象。定义一个create类方法具体代码如下:
class Student(models.Model):
name=CharField(max_length=20)
age =IntegerField()
@classmethod
def create(cls, name, age):
return cls(name, age)
class Meta:
db_table = "student"
类方法的定义要在函数的上方添加@classmethod,类方法把类当做第一个参数传给cls,后面的参数就是类的属性的形参,最后返回的把参数赋值给类属性。
创建对象一般在视图函数中,利用类方法创建一个名为小明,年龄为10的实例对象,代码如下:
name="小明"
age="10"
s3 = Student.create(name,age)
s3.save() #执行save()才能保存到数据库。