一、Django介绍

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

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

ORM:封装了数据库操作

form:校验请求数据

安装Django:

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

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

二、Django命令

1.创建项目命令:

django-admin startproject xxx

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 makemigrations user #只生成user app的表结构(py)
python manage.py migrate #同步到数据库

5.创建后台管理用户admin:

python manage.py createsuperuser #创建后台管理的admin用户

三、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('',views.get_sign),
path('category/<int:id>',views.category),
path('detail/<int:article_id>',views.detail)
]

3.3 settings.py====>该文件是配置文件,数据库等配置

"""
Django settings for sky project. Generated by 'django-admin startproject' using Django 3.2.6. For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/ For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
import os
from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-&9dmdfb5o_3ckyzo$s)b(-b37%x!f3l3jb7n+ukji5)$avh216' # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True ALLOWED_HOSTS = ['*'] #配置允许哪些ip访问的 *允许所有的 # Application definition INSTALLED_APPS = [
'simpleui',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
'order'
] #app注册 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')], # 这里设置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/3.2/ref/settings/#databases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR,'db.sqlite3'),
}
} #配置数据库的地方 默认是sqlite3 # Password validation
# https://docs.djangoproject.com/en/3.2/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/3.2/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/3.2/howto/static-files/ STATIC_URL = '/static/' # 设置静态文件目录
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
) # Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

3.4 wsgj.py====>该文件是用来部署用的

3.5 manage.py====> 项目管理文件

3.6 models.py====>操作数据库文件

from django.db import models

# Create your models here.

class BaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta:
abstract = True # 抽象基类 此模型 不会创建表 class Category(BaseModel):
name = models.CharField(max_length=50,verbose_name='分类名称',unique=True,null=False) class Meta:
db_table = 'category' # 表名
verbose_name = '文章分类'
verbose_name_plural = verbose_name
ordering = ['-create_time'] def __str__(self):
return self.name class Article(BaseModel):
title = models.CharField(max_length=100,verbose_name='文章标题')
content = models.TextField(verbose_name='文章内容') # 长文本内容
read_count = models.IntegerField(default=0,verbose_name='阅读次数')
category = models.ForeignKey(Category,on_delete=models.PROTECT,verbose_name='文章分类') # 外键 """
models.DO_NOTHING 删除父表 不影响子表
models.CASCADE 删除父表 同时删除子表
models.SET_DEFAULT 删除父表 子表相关字段设置默认值
models.SET_NULL 删除父表 子表相关字段设置为空
models.PROTECT 受保护的,父表存在子表,则不能删除父表
models.SET 自定义模式,自己指定
""" class Meta:
db_table = 'article' # 表名
verbose_name = '文章' # web展示的别名
verbose_name_plural = verbose_name
ordering = ['-create_time']
def __str__(self): # 修改类对象的输出内容 默认输出对象属于的类和 此对象的内存地址
return self.title

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

 python manage.py makemigrations

 python manage.py migrate

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

navicate 访问sqlite配置

关联删除模式:

    """
models.DO_NOTHING 删除父表 不影响子表
models.CASCADE 删除父表 同时删除子表
models.SET_DEFAULT 删除父表 子表相关字段设置默认值
models.SET_NULL 删除父表 子表相关字段设置为空
models.PROTECT 受保护的,父表存在子表,则不能删除父表
models.SET 自定义模式,自己指定
"""

3.7 views.py===>接收接口请求的处理逻辑 并返回响应

from django.http import JsonResponse
from django.shortcuts import render
from django.shortcuts import HttpResponse from hashlib import md5 # Create your views here.
from . import models def sign(s):
news = 'abcdefg'+ s
return md5(news.encode()).hexdigest() def index(request):
title = 'my blog'
categories = models.Category.objects.all()
articles = models.Article.objects.all() return render(request,'index.html',{'title':title,'categories':categories,'articles':articles}) def category(request,id): #categoryid
articles = models.Article.objects.filter(category_id=id)
categories = models.Category.objects.all()
return render(request,'category.html',{'articles':articles,'categories':categories}) def detail(request,article_id):
article = models.Article.objects.get(id=article_id)
article.read_count += 1
article.save()
article = models.Article.objects.get(id=article_id)
return render(request,'detail.html',{'article':article}) def get_sign_01(request):
print(request.method) # 请求方式
print(request.body) # 请求body
print(request.META) # 请求头
print(request.GET) # url里面的参数都到GET url?1= 1 & b=2
print(request.POST) # k-v k1-v1
print(request.FILES) # 文件
print(request.COOKIES) # cookies
# print(dir(request))
return HttpResponse("sign") def get_sign(request): s = request.GET.get('str')
data = {"code":0,"data":sign(s)} return JsonResponse(data) def category_view(request): # 查询
# c = models.Category.objects.all() # 查询所有的数据
# for i in c:
# print(i.name)
# print(i.id)
# print(i.create_time)
# print(i.update_time)
# c = models.Category.objects.get(name = 'JAVA') # 查询一条数据 需要保证查询结果为一条
# print(c.name)
#
# f = models.Category.objects.filter(name='JAVA',id = 3) # 可以返回多条 返回是list类型 多个条件是 且 关系
# print(f)
#
# result = models.Category.objects.filter(name = 'mysql').exists() # 判断查询结果是否存在 存在为True 否则为False
#
# print(result)
#
# count = models.Category.objects.filter(name = 'JVM').count() # 获取查询结果数量
# print(count) c = models.Category.objects.get(id = 3)
print(c.article_set.count()) return HttpResponse("OK")

3.8 ORM操作数据库

def category_view(request):

    # 查询
c = models.Category.objects.all() # 查询所有的数据
for i in c:
print(i.name)
print(i.id)
print(i.create_time)
print(i.update_time)
c = models.Category.objects.get(name = 'JAVA') # 查询一条数据 需要保证查询结果为一条
print(c.name) f = models.Category.objects.filter(name='JAVA',id = 3) # 可以返回多条 返回是list类型 多个条件是 且 关系
print(f) result = models.Category.objects.filter(name = 'mysql').exists() # 判断查询结果是否存在 存在为True 否则为False print(result) count = models.Category.objects.filter(name = 'JVM').count() # 获取查询结果数量
print(count) c = models.Category.objects.get(id = 3)
print(c.article_set.count()) return HttpResponse("OK")

5.9 test.py

测试代码

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

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

  1. 01: Django基础篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  2. 01:django基础篇

    Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...

  3. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  4. python3之Django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  5. Web框架django基础篇

    基本配置及学习  路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...

  6. Django基础篇(一)

    Python的Web框架有Django.Tornado.Flask等多种,Django相较其他web框架的优势有: 大而全.框架本身集成了ORM框架.模板绑定.缓存.Session等诸多功能. 1.安 ...

  7. django基础篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. Python学习—框架篇之初识Django

    什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的W ...

  9. Django基础篇--用户权限管理和组管理

    Django作为一个成熟的python后台开发框架,为开发者提供了很多内置的功能,开发者只需要做一些配置就可以完成原生操作中比较复杂的代码编写.这些内置功能中其中一个比较强大的功能就是后台用户管理类. ...

  10. Python学习-day19 django基础篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

随机推荐

  1. 如何在eclipse里的动态Web项目建立后缀为xml的文件

    1.右击Dynamic Web Project类型项目的WEB-INF->new->Other->XML,选择XML File2 点击next改名字为web(后缀不要动哦)3. 点击 ...

  2. 视频直播源码,js实现节流和防抖

    视频直播源码,js实现节流和防抖 防抖: 就是指连续触发事件但是在设定的一段时间内中只执行最后后一次,例如:设定1000毫秒执行,当你触发事件了,他会1000毫秒后执行,但是在还剩500毫秒的时候你又 ...

  3. ASPNETCORE托管/部署到WindowService的问题[服务显示正在启动]

    上述代码是asp.net core web api 3.1,使用Topshelf框架构建windows服务. 安装服务后,服务功能运行正常,但服务状态一直处于"正在启动",不能接收 ...

  4. ThinkPHP获取当前url

    $httpType = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTT ...

  5. Java Swing 防止键入手Key 的实现方法

    实现思路,启动一个线程每隔0.1秒去比较文本里字符长度变化,如果文本变长了,这个情况间隔时间超过2秒,则认为是人工键入. 对于字符串较多,且包含数字和字母的情况,比较适用. class KeyCode ...

  6. Unity 动态加载图片出现红色问号

    因为图片必须是RGB格式的才可以 ,Cao!!!

  7. nohup文件的压缩分割

    编写sh脚本 先拷贝,之后,清空. 待完成,压缩功能 #!/bin/sh #description split logs time1=$(date -d 'yesterday' "+%Y%m ...

  8. P8872 [传智杯 #5 初赛] D-莲子的物理热力学

    题目链接:P8872 [传智杯 #5 初赛] D-莲子的物理热力学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考了题解,自己在这再写一遍 假设数组有序且经过m次操作后的数组最 ...

  9. gin websocket

    gin 中使用websocket功能 go get github.com/gorilla/websocket var upgrader = websocket.Upgrader{ CheckOrigi ...

  10. Python 面试题整理

    一.语言特性 1.什么是Python?使用Python有什么好处?Python和其他语言的区别? Python是一种编程语言,它有对象,模块,线程,异常处理和自动内存管理. 好处:开源.简洁.简单.方 ...