一、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. ADAS感知算法观察

    ADAS感知算法观察 如果把一台ADAS车辆比作一个人的话,那么激光雷达.毫米波雷达.摄像头.IMU及GPS等等部件就相当于人的眼睛.鼻子.耳朵.触觉及第六感等器官或系统. 环境感知作为无人驾驶的第一 ...

  2. CUDA 11功能展示

    CUDA 11功能展示 CUDA 11 Features Revealed 新的NVIDIA A100 GPU基于NVIDIA安培GPU架构,实现了加速计算的最大一代飞跃.A100 GPU具有革命性的 ...

  3. 『言善信』Fiddler工具 — 7、统计选项页详解(Statistics)

    目录 1.Statistics选项页介绍 2.Statistics界面内容说明 3.Statistics选项页底部图表说明 1.Statistics选项页介绍 Statistics 页签显示当前用户选 ...

  4. 深入理解java虚拟机笔记Chapter11

    运行期优化 即时编译 什么是即时编译? 当虚拟机发现某个方法或某段代码运行的特别频繁时,会把这段代码认为成热点代码: 在运行时,虚拟机会将这段代码编译成平台相关的机器码,并进行各种层次的优化. Hot ...

  5. springmvc——CharacterEncodingFilter过滤器要放在所有过滤器前面

    CharacterEncodingFilter的拦截顺序必须是第一个,否则还是会出现乱码问题.这是因为 request对象的parameter并不是一开始就解析的,它是等你第一次调用getParame ...

  6. 【NX二次开发】获取相邻面UF_MODL_ask_adjac_faces

    获取箭头指示的面的相邻面 源码: 1 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 2 { 3 UF_init ...

  7. Eclipse安装Pydev插件时所遇到的问题

    安装pydev插件折腾了半天,因为总是安装不成功,不成功的表现就是:windows-preferences设置里没有pydev 由于第一次安装这个插件所以不了解安装pydev插件的版本是有要求的,根据 ...

  8. python实现机器学习笔记

    #课程链接 https://www.imooc.com/video/20165 一.机器学习介绍以及环境部署 1.机器学习介绍及其原理 1)什么是人工智能 人工智能就其本质而言,是机器对人的思维信息过 ...

  9. Java第二次博客作业

    Java第二次博客作业 时间过的很快啊,在不知不觉中这门课程的学习也就快要过去一半了,现在就来总结一下在这个第二个月的学习当中存在的问题以及得到的心得. 1.前言 第四次题目集和第五次题目集给我的感觉 ...

  10. Pytest学习笔记2-setup和teardown

    前言 我们在做自动化的时候,常常有这样的需求: 执行每一条用例时,都重新启动一次浏览器 每一条用例执行结束时,都清除测试数据 在unittest中,我们可以使用 setUp() 和 tearDown( ...