一、Django介绍

flask,FastApi是轻量级服务端开发框架

Django是重量级服务端开发框架

ORM:封装了数据库操作

form:校验请求数据

安装Django:

pip install django==2.1.7  #指定版本安装,默认是安装最新版本

注意:最新版本的Django对mysql版本也有要求

二、Django命令

1.创建项目命令:django-admin startproject test_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 指定端口启动,只能自己访问

3.创建子模块:python manage.py startapp user

4.创建表结构:

  python manage.py makemigrations  #生成建表/更新表的py文件

  python manage.py migrate  #根据上面命令生成的py文件,来建表/更新表

三、Django项目介绍

3.1 项目整体结构

3.2 urls.py

该文件是用来配置url的

from django.contrib import admin
from django.urls import path
from user import views urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('get_sign', views.get_sign),
path('category_view', views.category_view),
path('category/<int:id>', views.category),
path('article/<int:id>', views.detail),
]

3.3 settings.py

该文件是配置文件,数据库等配置

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '^28j+9pchzsrhs0w1p5n9hz+bp&4)dek8n8zd1+y0e+g4vvpxb' # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True ALLOWED_HOSTS = ['*'] #设置允许那些ip可以进行访问,如果允许所有,则写成['*'] # Application definition INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
'order'
] 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 = 'sky.urls' TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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_APPLICATION = 'sky.wsgi.application' # Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
} # 数据库配置 # Password validation
# https://docs.djangoproject.com/en/2.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/2.1/topics/i18n/ LANGUAGE_CODE = 'zh-Hans' # 设置语言,'en-us':英文,'zh-Hans':中文 TIME_ZONE = 'Asia/Shanghai' # 设置时区,'UTC':标准时区,'Asia/Shanghai':亚洲上海时区 USE_I18N = True USE_L10N = True USE_TZ = False # 设置是否使用标准时区时间,我们设置为False # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/ STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] # 设置静态文件目录

  

3.4 wsgj.py

该文件是用来部署用的

3.5 manage.py

项目管理文件

3.6 models.py

操作数据库文件

from django.db import models

# Create your models here.
# 创建表结构的地方 class BasicModel(models.Model):
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True) class Meta:
abstract = True class Category(BasicModel):
name = models.CharField(verbose_name='分类名称',max_length=50,unique=True) class Meta:
db_table = 'category'
verbose_name = '文章分类' # 在admin后台显示表名
verbose_name_plural = verbose_name # 在admin后台显示表名的复数形式 ordering = ['id'] # 根据某些字段进行升序排序
# ordering = ['-id'] # 有- 根据某些字段进行降序排序 # 定义下面的函数实现在admin后台中展示字段,从而代替展示的 tablename objects
def __str__(self):
return self.name class Article(BasicModel):
title = models.CharField(verbose_name='文章标题', max_length=50)
content = models.TextField(verbose_name='文章内容') # 长文本
read_count = models.IntegerField(verbose_name='阅读次数', default=0)
category = models.ForeignKey(Category, on_delete=models.PROTECT, verbose_name='分类') class Meta:
db_table = 'article'
verbose_name = '文章'
verbose_name_plural = verbose_name def __str__(self):
return self.title

代码写好后,分别执行以下命令,就可以生成表结构

 python manage.py makemigrations

 python manage.py migrate

Django 内嵌了sqllite,默认就是将表创建在sqllite中

如果想要连接mysql等其他数据库,需要自己在settings.py文件中配置

关联删除模式:

#外键删除操作模式
#models.DO_NOTHING:不受任何影响
#models.CASCADE:关联的数据也会被删除,分类被删除,引用分类的文章也会被删除
#models.SET:传入一个方法名,用方法逻辑处理
#models.SET_DEFAULT:删除了,设置为默认值,要该字段有默认值
#models.SET_NULL:删除了,直接设置为空,要该字段可为空
#models.PROTECT#受保护,不能删除,只要这个分类下有文章,就不能删除这个分类

3.7 views.py

是用来做逻辑处理的文件

from django.shortcuts import render
from django.shortcuts import HttpResponse
from . import models # Create your views here.
# 写逻辑的地方 def index(request):
# return HttpResponse('hello django!')
categories = models.Category.objects.all()
articles = models.Article.objects.all()
title = 'my blog'
return render(request, 'index.html', {'title': title, 'categories': categories, 'articles': articles}) # 第三个参数,把值传到html页面上 def get_sign(request):
print(request.method) # 请求方式
print(request.body) # 请求体
print(request.META) # 请求头
print(request.GET) # url里面的参数都在GET url? a=1&b=2
print(request.POST) # POST中的参数 k-v,k1=v1
print(request.FILES) # 文件
print(request.COOKIES) # cookies
return HttpResponse('sign') def category_view(request):
c = models.Category.objects.all() # 查询所有的数据
for i in c:
print(i.name)
print(i.create_time)
print(i.update_time)
print('=====================')
s = models.Category.objects.get(id=3) # 使用get,必须要保证返回的只有1条结果
print(s.name)
f = models.Category.objects.filter(name='java', id=3) # 进行过滤,返回多条结果 result = models.Category.objects.filter(name='mysql').exists() # 使用过滤后,利用exists方法判断是否存在
print(result)
result = models.Category.objects.filter(name='java').count() # 使用过滤后,利用count方法统计返回条数
print(result)
return HttpResponse('ok') def category(request, id):
categories = models.Category.objects.all()
articles = models.Article.objects.filter(category_id=id)
# print(articles.first()) # 返回第一个
# print(articles.last()) # 返回最后一个
return render(request, 'category.html', {'articles': articles, 'categories': categories}) def detail(request,id):
article = models.Article.objects.get(id=id)
counts = article.read_count
counts += 1 return render(request, 'detail.html', {'article': article, 'counts': counts})

3.8 ORM操作数据库

def category_view(request):
c = models.Category.objects.all() # 查询所有的数据
for i in c:
print(i.name)
print(i.create_time)
print(i.update_time)
print('=====================')
s = models.Category.objects.get(id=3) # 使用get,必须要保证返回的只有1条结果
print(s.name)
f = models.Category.objects.filter(name='java', id=3) # 进行过滤,返回多条结果 result = models.Category.objects.filter(name='mysql').exists() # 使用过滤后,利用exists方法判断是否存在
print(result)
result = models.Category.objects.filter(name='java').count() # 使用过滤后,利用count方法统计返回条数
print(result)
return HttpResponse('ok')

5.9 test.py

测试代码

注意:需要手动加入Django配置,才可以测试

Django基础-01篇的更多相关文章

  1. Django基础07篇 ORM操作

    1.新增(类似数据库操作的insert) # 新增 #方式一: models.Category.objects.create(name='MySQL') #方式二: c = models.Catego ...

  2. Django基础——Model篇(三)

    一 Django ORM中的概念 ORM —— 关系对象映射,是Object Relational Mapping的简写,是用来简化数据库操作的框架 Django ORM遵循Code Frist原则, ...

  3. Django基础——Model篇(二)

    一 Model连表关系 一对多:models.ForeignKey(其他表)    多对多:models.ManyToManyField(其他表)    一对一:models.OneToOneFiel ...

  4. Django基础第一篇

    目录 1.Django MTV框架简介 2.基础命令创建项目的配置说明 3.前后端交互案例 4.基于数据库实现数据交互增删改查 Django简介 Django框架的设计模式借鉴了MVC的思想,和MVC ...

  5. Django 基础05篇 上下文管理和前端代码复用

    一.上下文管理器 在views中重复使用的代码,可以通过上下文管理器(在setting.py文件中的TEMPLATES中配置)中实现,减少代码冗余 上下文管理器的处理流程如下: 1.先走完views里 ...

  6. Django基础-04篇 Django开发前后端联动

    1. 写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:i ...

  7. Django基础——Model篇(一)

    到目前为止,当程序涉及到数据库相关操作时,我们一般都会这么操作:    (1)创建数据库,设计表结构和字段    (2)使用MySQLdb来连接数据库,并编写数据访问层代码    (3)业务逻辑层去调 ...

  8. Django基础-01

    Django 是基于 Python,所有的 Django 代码都是用Python写成的. Django 特点 强大的数据库功能 拥有强大的数据库操作接口(QuerySet API),如需要也能执行原生 ...

  9. django基础-01:软件框架,MVC框架,MVT

    1. 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模 ...

随机推荐

  1. 能够划分局域网的VLAN

    VLAN与三层交换机 1. VLAN的概述与优势 1.1 分割广播域 1.2 VLAN的优势 2. VLAN的种类 2.1 静态VLAN 2.2 动态VLAN 3. VLAN的ID 4.三层交换机转发 ...

  2. oracle实现通过logminer实现日志抓取分析

    场景:现场库到前置库. 思考:使用触发器? 1.侵入性解决方案 2.需要时各种配置,不需要时又是各种配置 Change Data Capture:捕捉变化的数据,通过日志监测并捕获数据库的变动(包括数 ...

  3. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

  4. Fiddler抓包后转成jmeter脚本

    Fiddler的安装及使用 1.安装:无特别需要注意事项 2.使用: (1)目前我使用的是Fiddler 4版本,打开页面如下 (2)如下图,在界面右侧找到Filters tabs,根据需要进行设置, ...

  5. TVM性能评估分析(六)

    TVM性能评估分析(六) Figure 1.  The workflow of development PC, compile, deploy to the device, test, then mo ...

  6. PyTorch Data Parrallel数据并行

    PyTorch Data Parrallel数据并行 可选择:数据并行处理 本文将学习如何用 DataParallel 来使用多 GPU. 通过 PyTorch 使用多个 GPU 非常简单.可以将模型 ...

  7. YOLO v4分析

    YOLO v4分析 YOLO v4 的作者共有三位:Alexey Bochkovskiy.Chien-Yao Wang 和 Hong-Yuan Mark Liao.其中一作 Alexey Bochko ...

  8. 如何保证Qt状态机的最佳性能

    如何保证Qt状态机的最佳性能 How to ensure the best Qt state machine performance 如果您使用Qt进行应用程序开发,并且使用状态机,那么很可能您正在使 ...

  9. fiddler修改请求包和返回包

    设置好过滤后,找到需要修改的包,按如下步骤进行包的数据修改1.设置"禁止上传"(禁止XX为本人自己理解,专业术语不记得了,高手可留言笔者重新修订博文),打上断点,如下标志就是在请求 ...

  10. 【题解】codeforces 1B Spreadsheets

    题意翻译 人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统:第一列被标为A,第二列为B,以此类推,第26列为Z.接下来为由两个字母构成的列号: 第27列为AA,第28列为AB-在标为 ...