Django基础(1)
一、开发模式
MVC模式:
- model:数据库
- view:前端展示
- controller:逻辑控制
MTV模式(Django):
- model:数据库
- view:逻辑控制
- template:前端展示(模板)
前后端分离 与 不分离 模式,请求过程:

前后端不分离:每次都需要打开整个Html进行替换
前后端分离:只需要后端获取到数据返回后,在页面把所需替换的变量进行替换,不需要每次都打开整个Html
由此我们可以了解到:前后端分离的性能会更加好些
二、Django介绍
- 重量级服务端开发接口框架
- flask、FastAPI 轻量级的服务端开发框架
- ORM:封装了数据库操作(无需使用SQL)
- form:校验请求数据(无需写代码校验)
安装Django:
pip install django==2.1 #指定版本安装,默认是安装最新版本
注意:最新版本的Django对mysql版本也有要求
如报错:TypeError: argument of type ‘WindowsPath’ is not iterable,需在 setting.py 找到 DATABASES 中的 NAME,value调整为:str(BASE_DIR / 'db.sqlite3')即可。
三、Django命令
1.创建项目命令
django-admin startproject ssz_django
2.启动项目命令
python manage.py runserver #默认端口启动8000 python manage.py runserver 0.0.0.0:8002 #指定端口启动,别人也可以访问 python manage.py runserver 127.0.0.1:8002 #指定端口启动,只能自己访问
页面启动方式:

点击可进入Pycharm命令模式:

验证是否启动:


3.项目中创建子模块
首先需要 cd 进入到manage.py 的当前目录下
python manage.py startapp user
4.创建表结构
首先需要在model是操作数据库的,在model.py下写表结构,Django中默认的是db.sqlite3数据库,然后在执行以下的命令
python manage.py makemigrations #生成建表/更新表的py文件 python manage.py migrate #根据上面命令生成的py文件,来建表/更新表
进入Navicat中连接

Pycharm中数据库打开(第一次连接需要下载插件):

5.查看所有命令行
python manage.py --help
四、pycharm页面中创建Django项目

pycharm创建子模块:
Tools--Run manage.py Task #进入命令行 startapp user #创建user子模块
五、Django项目介绍
1 、项目整体结构

创建流程

2、settings.py
——配置文件,配置数据库连接等
初始化时需修改:
TIME_ZONE默认是标准时区,更改为东八区时区,TIME_ZONE = 'Asia/ShangHai'
USE_TZ默认是Ture,更改为USE_TZ = False,不修改,插入数据时,依旧是标准时区的时间
LANGUAGE_CODE = 'en-us'页面显示是英文,更改为:LANGUAGE_CODE = 'zh-Hans',会显示为中文
- 如是【命令行创建】:TEMPLATES中 DIRS需要加上templates的路径:BASE_DIR / 'templates'
import os
from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent # BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(BASE_DIR) # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-+atw*_yf*lmcifvr%wxpe04d19)&-9sqidqh8@36c5^_&k6&!$' # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True ALLOWED_HOSTS = [] # Application definition # 我们创建了哪些子项目要在这里添加,不然如数据库的类不会帮创建
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sky.apps.SkyConfig',
'user', # 与sky.apps.SkyConfig'没区别
'case',
'test_tools'
] MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ROOT_URLCONF = 'Django学习.urls' TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'] # 指的是django寻找html模板的目录
,
'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_APPLICATION = 'Django学习.wsgi.application' # Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': str(BASE_DIR / 'db.sqlite3'),
}
} # Password validation
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators 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.1/topics/i18n/ # 页面显示为英文:LANGUAGE_CODE = 'en-us' # 页面显示为中文,更改后,不需要重启,会自动的重启
LANGUAGE_CODE = 'zh-Hans' # 时区,UTC表示标准时区,需要更改为我们属于的东八区:Asia/Shanghai
TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_TZ = False # True是标准时间,不修改,插入数据时,依旧是标准时区的时间,需要更改为Fase # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/ STATIC_URL = 'static/' # Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # 自加:静态文件
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # 元组,每次需要加逗号
)
默认使用sqlite数据库,如用mysql数据库,除了在DATABASES配置mysql数据库外,还需在与settings.py文件同级的__init__.py里增加以下代码才可用:
import pymysql
pymysql.install_as_MySQLdb()
3、urls.py
——配置Url,所有的都会在这配置
from django.contrib import admin
from django.urls import path
from user.views import * # 引入views自写模块 urlpatterns = [
path('admin/', admin.site.urls),
path('index/', user_info), # 第一个参数:路径 第一个参数:接口的函数名
path('welcome/', welcome),
path('', index) # 第一个参数什么也不写,代表在根目录下
]
4、wsgj.py
用来部署到生产环境
"""
WSGI config for Django学习 project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see
https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/
""" import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django学习.settings') application = get_wsgi_application()
5、manage.py
用来管理这个项目,如:启动项目呢、修改表结构
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django学习.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__':
main()
6、views.py
编写项目逻辑
from django.http import HttpResponse
from django.shortcuts import render # Create your views here. def user_info(request): # request是获取请求的返回值
s = 'Hello'
return HttpResponse(s) # 不可以直接返回字符串,需要是HttpResponse;返回的是字符串使用HttpResponse(接口返回的可使用) def welcome(request):
username = 'qiaofeng' # request返回
username_zh = '乔峰===' # sql查询到 # render:需返回Html使用;所做:把参数进行替换
# 第一个参数:接口返回值,第二个参数:前端文件名称,第三个参数:可传递给前端(必须是dict)
return render(request, 'welcome.html', {'username_zh': username_zh})
render在做的事情:
f = open(r'C:\Users\xxx\welcome.html', encoding='utf-8')
content = f.read()
new_content = content.replace('{{ username }}', username_zh)
return HttpResponse(new_content)
7、tests.py
单元测试代码(需要手动加入Django配置,才可以测试)
运行Django项目时,不需要手动设置,因为在manager.py文件中配置了
from django.test import TestCase
import os, django # Create your tests here. # 正常启用manage不需要有以下2行的操作,因为manage.py会启动;目前是普通的py文件,就需要加一下
# 告知django的配置文件路径
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django学习.settings')
# 设置下配置文件
django.setup() from user import models # 这个导入不可以放在最上边,因需要先执行下上边2行代码才可以 # 增
# 方法1
category = models.Category(name='Python')
category.save() # 方法2
# 不需要.save
models.Category.objects.create(name='linux') # 查
c1 = models.Category.objects.get(id=1) # 只可以返回一条,返回多条时会报错
print(c1) # 直接取的是一个对象:Category object (1)
print(c1.name) # 获取到value:Python
8、models.py
操作数据库,默认的是使用SQLite,Python内置了SqLite,无需安装额外的,如在Pycharm中第一次连接数据库,下载插件即可:
from django.db import models # Create your models here. class Article(models.Model): # models.Model继承后才是数据库的一个类
# 定义表: 表名、类型
title = models.CharField(verbose_name='标题', max_length=25)
# default:默认的标题是什么;blank=True:字段可以为空
# CharField对应数据库中的:varchar,必须写最长的长度;verbose_name:对应的中文名;max_length:最大的长度
content = models.TextField(verbose_name='文章内容', blank=True) # TextField:长文本类型,不需要指定max_lticength
img = models.ImageField(upload_to='static') # ImageField:图片类型 upload_to:指定下路径
create_time = models.DateTimeField(verbose_name='创建时间',
auto_now_add=True) # auto_now_add=True:只有在创建的时候会自动的加上时间,不会在变
update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True) # auto_now=True修改时会自动的加上时间
models.ForeignKey() # 外键,一对多的时候会用到 class Meta:
db_table = 'category' # 定义表名,如果不定义表名默认生成的表名是“子项目名+定义的类名”
ordering = ['-create_time'] # 按什么排序,默认是升序,如果想要降序就加一个-号
verbose_name = '文章分类' # 加上这个后台管理页面表名显示为中文,设置verbose_name主要是为了在后台管理页面展示为中文,方便操作。
verbose_name_plural = verbose_name # 英文是有复数的中文没有,加上这个中文后就不显示s了。如果就想显示英文,注释这两行即可。 def __str__(self): # 不加查询数据时显示的是数据对象,加了后,查询可显示数据的value值
return self.name class Category(models.Model):
name = models.CharField(verbose_name='分类名称', max_length=20)
create_time = models.DateTimeField(verbose_name='创建时间',
auto_now_add=True) # auto_now_add=True:只有在创建的时候会自动的加上时间,不会在变
update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True) # auto_now=True修改时会自动的加上时间
9、apps.py
应用的配置
10、admin.py
自带的后台管理
11、migrations文件夹
创建表相关
12、项目所在目录同名的文件夹
配置文件:数据库等都在此配置

13、templates
- django寻找html模板的目录
- 也可不是templates为文件名

14、新增static文件
前端静态文件

Django基础(1)的更多相关文章
- Python之路-(js正则表达式、前端页面的模板套用、Django基础)
js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- Django 基础教程
Django 基础教程 这是第一篇 Django 简介 » Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- Python学习(二十六)—— Django基础一
转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...
- Django基础(一)
Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...
- python3之Django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- DJango 基础 (1)
django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...
- Django基础和基本使用
Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...
随机推荐
- Visual Studio 2022 MAUI NU1105(NETSDK1005) 处理记录
故障说明 MAUI项目是日常使用的项目,一直都好好的 某一天修改了几行代码后,突然项目无法编译了,提示NU1105错误 从Git重新拉取一份之前的代码编译也是同样的错误,经过半天的查阅,尝试了几种方案 ...
- Dubbo架构设计与源码解析(二) 服务注册
作者:黄金 一.Dubbo简介 Dubbo是一款典型的高扩展.高性能.高可用的RPC微服务框架,用于解决微服务架构下的服务治理与通信问题.其核心模块包含 [RPC通信] 和 [服务治理] ,其中服务治 ...
- vue3实现一个抽奖小项目
前言 在公司年会期间我做了个抽奖小项目,我把它分享出来,有用得着的可以看下. 浏览链接:http://xisite.top/original/luck-draw/index.html 项目链接:htt ...
- 通过this引用成员方法-类的构造器
通过this引用成员方法 this代表当前对象,如果需要引用的方法就是当前类中的成员方法,那么可以使用"this成员方法"的格式来使用方法引用.首先是简单的函数式接口︰ 下面是一个 ...
- 华为云MRS支持lakeformation能力,打造一站式湖仓,释放数据价值
摘要:对云端用户而言,业务价值发现是最重要的,华为MRS支持LakeFormation后,成功降低了数据应用的成本,帮助客户落地"存"与"算"的管理,加快推进了 ...
- Python风格规范(转载)
Python风格规范(转载) https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python ...
- http八股 跨域的本质 请求行 请求头 请求体 xss
1小八股 介绍 http 请求分为三个部分,请求行,请求头,请求体 还有状态码的含义 https://juejin.cn/post/7096317903200321544 2tips Content- ...
- Centos7搭建hadoop3.3.4分布式集群
目录 1.背景 2.集群规划 2.1 hdfs集群规划 2.2 yarn集群规划 3.集群搭建步骤 3.1 安装JDK 3.2 修改主机名和host映射 3.3 配置时间同步 3.4 关闭防火墙 3. ...
- 【python自动化测试】1- python基础和pycharm使用
python基础和pycharm使用 1.pycharm 1.1 为特定格式文件添加头信息 File--Settings--Editor--File and Code Templates--Pytho ...
- TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 —— 网络地址的分配方式
TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 -- 网络地址的分配方式 关于 DHCP(DHCP, Dynamic Host Co ...
