一、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配置,才可以测试

最新文章

  1. 玩转Docker之常用命令篇(三)
  2. Robot Framework--13 RFS+AutoItLibrary测试web上传下载
  3. C# tabconctrol切换事件
  4. php 单态设计模式
  5. 三HttpServletResponse对象介绍(1)
  6. Javascript的匿名函数
  7. android124 zhihuibeijing 新闻中心-组图
  8. Android SimpleAdapter源码详解
  9. 【IOS学习基础】文件相关
  10. DataSet、DataTable、DataRow 复制
  11. Python中if __name__ == &quot;__main__&quot;: 的理解
  12. Object类的方法
  13. [LeetCode] Maximum Depth of N-ary Tree N叉树的最大深度
  14. Mysql 8 常用命令测试
  15. 【Unity】Protobuf的使用与常见问题
  16. [Android Studio] Using API of OpenCV DNN
  17. sublime markdown 设置
  18. 解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题
  19. [UE4]为UStaticMeshComponent添加点击事件
  20. 简单的卷积神经网络(CNN)的搭建

热门文章

  1. .NET Core HttpClient请求异常详细情况分析
  2. Jmeter- 笔记3 - Jmeter录制功能 / 抓包
  3. TensorRT原理图示
  4. Samsung WLAN AP RCE漏洞及利用工具
  5. 菜鸟刷题路:剑指 Offer 03. 数组中重复的数字
  6. WordPress安装篇(5):源码编译安装LNMP并部署WordPress
  7. 【NX二次开发】导出x_t、导入x_t例子,UF_PS_export_data、UF_PS_import_data
  8. MaterialDesignInXamlToolkit“无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容”异常的解决思路
  9. 乘风破浪,Windows11预览版升级和安装,积极准备中的大跃进
  10. HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置