Django官网:https://docs.djangoproject.com/en/4.2/
文档推荐看英文,看不懂就换中文吧
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
2020年,Django 3.0发布。
2022年,Django 4.0发布。Django 4.0 将支持 Python 3.8、3.9与3.10
2023年,Django 4.2LTS发布,长期支持版本,会维护3年,在企业中我们建议使用LTS版本
Django每2年会推出全新的大版本。
创建虚拟环境
# 先打开cmd
# 安装virtualenv (windows操作系统)
pip install virtualenv virtualenvwrapper-win
# Linux
pip install virtualenv virtualenvwrapper
# workon 查看虚拟环境
workon
# mkvirtualenv 创建新的虚拟环境
mkvirtualenv env
# rmvirtualenv 删除虚拟环境
# rmvirtualenv env
# 进入虚拟环境
workon env
我们来装我们自己的jango
# 创建虚拟环境
mkvirtualenv envdjango4
# 进入虚拟环境
workon envdjango4
建议使用镜像,安装命令后面最好加一个4.2的版本,可以是4.2.1 也可以是4.2,用的是国内镜像douban,也可以用其他镜像,这样速度会快一些
pip install django==4.2 -i https://pypi.douban.com/simple
4.2是LTS长期支持版本,推荐使用,如果不写则会安装最新版本。
测试django是否安装成功
pip show django
pip freeze
会输出所有在本地已安装的包(但不包括 pip、wheel、setuptools 等自带包),若需要输出内容与pip list
一致,需使用pip freeze -all
。
pip list
查看所有的包
选择C:\Users\用户名\Envs\虚拟环境\Scripts\python.exe,点击OK
点击OK,等待下面的进度条走完,等他加载完
django-admin startproject MyFirstDjango
来创一个名字为 MyFirstDjango 的工程 File > new Project
C:\Users\用户名\Envs\虚拟环境\Scripts\python.exe
点击OK
创建项目后,目录结构会比第一种方式多一些文件夹:
jango项目下面会有一个一样名字的文件夹,还有一些文件,这些东西名字不要去改它。
manage.py :
· manage是管理的意思,manage.py是用于启动项目或者执行一些命令的文件。
· 是Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。
MyDjangoPro2/__init__.py
· 告诉python该目录是一个python包,方便我们用Python管理,暂无内容,后期一些工具的初始化可能会用到
MyDjangoPro2/settings.py
· Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等
MyDjangoPro2/urls.py
· 维护项目的URL路由映射,即定义当客户端访问时由哪个模块进行响应。
MyDjangoPro2/wsgi.py
· 全称为Python Web Server Gateway Interface,即Python服务器网关接口,是Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改。
MyDjangoPro2/asgi.py
· 定义ASGI的接口信息,和WSGI类似,在3.0以后新增ASGI,相比WSGI,ASGI实现了异步处理,用于启动异步通信服务,比如:实现在线聊天等异步通信功能(类似Tornado异步框架)。它是用于存储asgi设定的文件,如果使用ASGI部署django会用到,一般情况下不需要更改。
templates 模板目录
user 就是刚刚设置的应用名称
· migrations 迁移文件夹,以后迁移文件都会放在这里面
· admin.py 后台管理系统,如果要配置后台管理系统就需要用到它
· apps.py 就是当前应用的配置
里面也没写什么,name = 'user',就是告诉你应用名称是什么
· models.py 模型,存放模型的地方
· tests.py 单元测试,如果要写单元测试用例的话可以在这写
· views.py 视图,写视图函数都在这里
"""
Django settings for MyDjangoPro2 project.
Generated by 'django-admin startproject' using Django 4.2.
这里是他的文档
For more information on this file, see
https://docs.djangoproject.com/en/4.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.2/ref/settings/
"""
from pathlib import Path
'''
BASE_DIR 项目根目录
Path(__file__) 当前这个文件的绝对路径
.parent.parent 父目录的父目录
Path(__file__).resolve().parent.parent得到的就是项目的路径
以后我们去找项目目录下的文件或文件夹,就用 BASE_DIR / "子路径"
'''
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# 快速开始的文档
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
# SECRET_KEY 项目唯一的密钥,这个是方便它在内部加密、解密处理的时候 用到。
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-5ot-%22ub-!mi#-*hth-ac=dvo^)n1q*kbs+@lrsbv@2e1pq=g'
# SECURITY WARNING: don't run with debug turned on in production!
# 是否使用调试模式,
# True:表示调试模式,自动重启,改了代码不用我们手动重启了,一般用于开发过程;
# False: 表示非调试模式,一般用于上线部署
DEBUG = True
# 被允许的域名或IP
# 写法:
# *:表示通配符,匹配所有IP,也就是所有的IP都能访问我 ALLOWED_HOSTS = ['*'] 表示可以被其他任何电脑来访问我(局域网)
# 上线后可以指定某个IP,指定其他哪些服务器来访问我,如果所有电脑都能访问就是*
## ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
# Application definition
# 定义应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user.apps.UserConfig', # 这里也可以直接写上 'user',
# 我们自己写的应用一定要在这里定义一下,如果不写后面有一些功能会受到限制
# 定义自己的应用
# 'user',
]
# 中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', # 安全处理的,防止csrf攻击
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 根路由
ROOT_URLCONF = 'MyDjangoPro2.urls' # 就是: 项目根目录\MyDjangoPro2\urls.py
# 模板
TEMPLATES = [
# 可以配置多个模板,一般配置一个模板就可以了
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 指定模板文件夹
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# WSGI的目录: 根目录\MyDjangoPro2\wsgi.py
WSGI_APPLICATION = 'MyDjangoPro2.wsgi.application'
# Database 数据库
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
DATABASES = {
'default': { # 默认情况用到的是sqlite3数据库,经常用在手机端,或者一些小型数据库里面,因为他是单线程的
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3', # 这里路径会放在根目录下面,如果没有,运行之后就有了
}
# 注意:我们这里要用的话,只能用关系型数据库。如果用mysql要注意,它还要指定域名,IP、端口、用户名密码
}
# Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
# 密码验证的东西,这些都是Django内部的东西
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization 国际化
# https://docs.djangoproject.com/en/4.2/topics/i18n/
# 主要是地区、语言的配置
LANGUAGE_CODE = 'en-us' # 语言,默认英语en-us, 中文zh-hans。它主要是后台管理系统会变中文
TIME_ZONE = 'UTC' # 时区
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images) 静态文件,主要是为html服务的
# https://docs.djangoproject.com/en/4.2/howto/static-files/
STATIC_URL = 'static/'
# Default primary key field type 默认主键字段的类型
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
python manage.py runserver [ ip:port ]
如果只是改端口可以不用写IP,python manage.py runserver 8001
注意IP不能随便改,要么 127.0.0.1 ,要么就写成 0.0.0.0 (表示可以让局域网其他电脑来访问我),python manage.py runserver 0.0.0.0:8000
可以直接进行服务运行 默认执行起来的端口是8000
也可以自己指定ip和端口:
1. 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip):
python manage.py runserver 0.0.0.0:8000
2.同时在settings.py中将
ALLOWED_HOSTS=['*'] (让所有的电脑都能访问)
3.在其他局域网电脑上可以通过在浏览器输入 Django项目所在电脑的 IP:8000 来访问
注意:You have 18 unapplied migration(s) 意思是你有18个没有被应用的迁移文件。这个迁移文件每次创建新项目都会有这个提示,因为它创建项目的同时,在它内部有代码,它内部默认给了你18个迁移文件,它已经生成了迁移文件了,但这个迁移文件并没有同步到迁移文件里面去。这行信息你可以管也可以不管,因为我们现在还没有写自己的模型,如果你要用它内部的这些迁移文件,那么就要去做迁移。
如果你要
退出,按 Ctrl+C
如果用python manage.py runserver 0.0.0.0:8000启动,浏览器输入http://0.0.0.0:8000/ 是访问不了的,用
http://127.0.0.1:8000/
或http://localhost:8000/
或者http://自己的ip地址:8000/ 可以访问
。
cmdipconfig
查看自己ip
迁移的概念: 就是将模型映射到数据库的过程
生成迁移文件: python manage.py makemigrations
执行迁移: python manage.py migrate
不需要初始化迁移文件夹,每个应用默认有迁移文件夹migrations
db.sqlite3 迁移文件生成的表格直接打开是打不开的,我们直接使用PyCharm 数据库的可视化吧
db.sqlite3 是不需要创建数据库名字的,直接就是表,tables下这些是jango自带的一些数据库表
如果项目当中功能很多模块很多,我们可能需要再创建多个App。
python manage.py startapp App
创建名称为App的应用
我们创建新的App在settings.py默认情况下是没有注册(定义)的,使用应用前需要将应用配置到项目中,在settings.py中将应用加入到 INSTALLED_APPS选项中,后面就能使用这个App了。
应用目录介绍:
__init__.py:
其中暂无内容,使得app成为一个包
admin.py:
管理站点模型的声明文件,默认为空
apps.py:
应用信息定义文件,在其中生成了AppConfig,该类用于定义应用名等数据
models.py:
添加模型层数据类文件
views.py:
定义URL相应函数,视图函数
migrations包:
自动生成,生成迁移文件的
tests.py:
测试代码文件
我们打开 user\views.py
from django.shortcuts import render
from django.http import HttpResponse
# 视图函数Views
def index(request):
# pass
# 返回响应 response
return HttpResponse('hello Django!!!')
路由在MyDjangoPro2\urls.py 里写
from django.contrib import admin
from django.urls import path
from user.views import *
urlpatterns = [
path('admin/', admin.site.urls),
# 路由url
path('index/', index)
]
python manage.py runserver 启动之后浏览器输入 http://127.0.0.1:8000/index/
在视图模板里面除了返回 HttpResponse(‘hello Django!!!’) 这样的内容以外,还可以以渲染模板的方式。
在user应用中新建一个文件夹templates,注意单词不要写错了
。在里面我们新建一个html,叫 index.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index页面title>
head>
<body>
<h1>Index页h1>
<hr>
<h3>Hello Djangoh3>
body>
html>
user\views.py
from django.shortcuts import render
from django.http import HttpResponse
# 视图函数Views
def index(request):
# pass
# 返回响应 response
# return HttpResponse('hello Django!!!')
# 渲染模板render,渲染html
return render(request, "index.html")
http://127.0.0.1:8000/index/