创建django项目
使用anaconda创建django项目的虚拟环境
# 1. 打开anaconda prompt
conda create -n env_django python=3.9
# 2. 激活虚拟环境,默认在anaconda下的envs中
conda activate env_django
# 3. 安装django
conda install django==4.2
# 4. 测试环境是否安装好
import django
django.get_version()
# 5. 切换到项目目录,创建django工程
django-admin startproject HelloDjango
新建的django工程目录结构及主要作用如下:
└── HelloDjango
├── HelloDjango # django-admin startproject HelloDjango 工程目录,工程的主配置
│ ├── __init__.py # 告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可能会用
│ ├── settings.py # Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等
│ ├── urls.py # 维护项目的URL路由映射,即定义当客户端访问时由哪个模块进行响应
│ └── wsgi.py # 定义WSGI的接口信息,主要用于服务器集成,通常本文件生成后无需改动
├── manage.py # 用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成
└── templates # 手动创建的模板目录,可在pycharm中右键设置为模板目录
可以使用pycharm打开项目,需要注意需要在工程的顶层目录打开,作为根目录存在
django默认使用的数据库是sqlite3,后续有需求也可以将其更改为Mysql、postgres等
# 生成迁移文件
python manage.py makemigrations
# 执行迁移
python manage.py migrate
创建超级管理员,输入用户名、邮箱、密码
python manage.py createsuperuser
运行项目,可以指定端口,默认为8000,也可以从指定配置文件启动项目 然后在浏览器输入 localhost:8000 访问,成功则表示环境、项目创建一切ok
python manage.py runserver [ip:port] [--settings=mysite.settings]
django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用 django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启 按ctrl+c停止服务器
也可以直接在manage.py中更改端口号
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'superdatafarmer.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
# 重新指定项目运行的端口
from django.core.management.commands.runserver import Command as runserver
runserver.default_port = '8080'
main()
在正式编写我们django程序之前,我们需要先做一些配置,在settings.py中更改如下配置:
调试模式,创建工程后初始值为True
DEBUG=true
注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False
一般情况下会使用mysql数据库,一般需要安装mysql-client作为mysql的驱动包
pip install mysqlclient
但是mysql-client有时候安装会报错,我们可以选择pymysql
pip install pymysql
安装pymysql后需要在,项目同名子目录下的__init__.py中添加如下命令:
import pymysql
pymysql.install_as_MySQLdb()
在setting.py配置mysql参数如下:
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE':'django.db.backends.mysql',
'NAME':'blog',
'USER':'root',
'PASSWORD':'123456',
'HOST':'localhost',
'PORT':'3306',
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
'charset': 'utf8mb4',
'use_unicode': True,
},
}
}
# 需要更改如下参数,否则会报错
# Database returned an invalid datetime value. Are time zone definitions for your database installed?
USE_TZ = False
# LANGUAGE_CODE = 'en-us' # 语言
# TIME_ZONE = 'UTC' # 时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
# 日志文件
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/home/mysite_debug.log',
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
}
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
},
}
python manage.py startapp Appname
创建后,会在django目录下生成一个子文件夹,我们一般还需要再添加一个urls.py文件,添加后目录如下:
└── HelloDjango
├── App # Django manage.py startapp App 创建的web应用,应用目录
│ ├── admin.py # 对应应用后台管理配置文件,默认为空
│ ├── apps.py # 应用信息定义文件,在其中生成了AppConfig,该类用于定义应用名等数据
│ ├── __init__.py
│ ├── migrations # 数据迁移、移植文目录,记录数据库操作记录,内容自动生成
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ └── __init__.cpython-37.pyc
│ ├── models.py # 添加模型层数据类文件
│ ├── tests.py # 测试代码文件
│ └── views.py # 定义URL相应函数(路由规则)
├── HelloDjango # django-admin startproject HelloDjango 工程目录,工程的主配置
│ ├── __init__.py # 告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可能会用
│ ├── settings.py # Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等
│ ├── urls.py # 维护项目的URL路由映射,即定义当客户端访问时由哪个模块进行响应
│ └── wsgi.py # 定义WSGI的接口信息,主要用于服务器集成,通常本文件生成后无需改动
├── manage.py # 用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成
└── templates # 手动创建的模板目录,可在pycharm中右键设置为模板目录
创建应用后,需要注册,在settings.py文件中添加如下内容:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App', # 添加新注册的应用
]
在应用的models.py目录下创建模型
from django.db import models
class Grade(models.Model):
gname = models.CharField(max_length=10)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField()
class Meta:
verbose_name = '专题'
verbose_name_plural = verbose_name
ordering = ['id']
def __str__(self):
return self.gname
创建模型后,执行迁移命令,会在数据库中生成对应的表
可以在django的内置后台(localhost:8000/admin/)中生成这个model的管理表单
from django.contrib import admin
from .models import Grade
@admin.register(Grade)
class GradeAdmin(admin.ModelAdmin):
list_display = ('id','gname','gdate')
ordering = ('-id',)
# 或者
admin.site.register(ArticlePost)
视图即需要编写的业务逻辑
from django.http import HttpResponse
def welcome(request):
"""
:param request: 包含了请求信息的请求对象
:return: 响应对象
"""
return HttpResponse('HelloDjango')
在创建app的时候,默认目录下是没有路由文件的,我们需要在app的目录下手动新建一个 urls.py 文件用于存放路由
Django2.0之后,app的urls.py必须配置app_name,否则会报错
from django.urls import path
from . import views
app_name = 'app'
urlpatterns = [
path('welcome/', views.welcome, name='welcome'),
]
然后在项目的总路由(在项目同名子目录下的urls.py中)中关联这个路由
namespace可以保证反查到唯一的url,即使不同的app使用了相同的url
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path("admin/",admin.site.urls),
path("app/", include("app.urls",namespace="app")),
]
然后我们运行项目,在浏览器中输入:localhost:8000/welcome/ , 就可以看到我们返回的内容了
我们需要在应用目录下新建模板文件夹,然后添加一个html文件,目录结构如下:
└── HelloDjango
├── App
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
| |—— templates # 名称必须是templates
| | |——app # 和app名称相同,用于存放模板文件
| | |—— welcome.html
│ ├── models.py
│ ├── tests.py
│ └── views.py
html文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>welcome</h1>
<p>你好</p>
</body>
</html>
在setting.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',
],
},
},
]
视图函数改为如下:
from django.shortcuts import render
def welcome(request):
"""
:param request: 包含了请求信息的请求对象
:return: 响应对象
"""
return render(request,'app/welcome.html')
运行项目后就可以看到刚才定义的html中的内容
# settings.py中
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR /'static'
]
# 部署后需要收集所有的静态文件,需要添加如下参数
STATIC_ROOT = BASE_DIR /'static_collectd'
# 使用如下命令触发收集:django manage.py collectstatic
# settings.py
# 媒体文件上传路径
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
# 在项目根路由中配置media的路由 urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
# settings.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
# 创建缓存表的命令 python manage.py createcachetable
EMAIL_HOST = 'smtp.163.com' # SMTP服务器
EMAIL_HOST_USER = 'xxxx@163.com' # 邮箱名
EMAIL_HOST_PASSWORD = 'xxxxxxx' # 邮箱密码
EMAIL_PORT = 25 # 发送邮件的端口
EMAIL_USE_TLS = True # 是否使用 TLS
DEFAULT_FROM_EMAIL = 'xxxx@163.com' # 默认的发件人
# 查看所有命令
python manage.py
# 新建项目
django-admin.py startproject mysite
# 新建APP
python manage.py startapp blog
# 启动
python manage.py runserver 8080
# 同步或者更改生成 数据库:
python manage.py makemigrations [app]
python manage.py migrate
# 查看迁移文件的具体sql语句
python manage.py sqlmigrate appname 迁移文件名
# 创建管理员
python manage.py createsuperuser
# 创建缓存表
python manage.py createcachetable
# 清空数据库
python manage.py flush
# 修改用户密码
python manage.py changepassword username
# Django项目环境终端,调用当前项目的 models.py 中的 API,对于操作数据的测试非常方便
python manage.py shell