一、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. openresty 学习笔记六:使用session库

    openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...

  2. Jenkins-java项目自动发布

    path="${WORKSPACE}/git" # 创建目录 if [ -d $path ]; then echo "The files is already exist ...

  3. MindInsight张量可视设计介绍

    MindInsight张量可视设计介绍 特性背景 张量可视,能够帮助用户直观查看训练过程中的Tensor值,既支持以直方图的形式呈现Tensor的变化趋势,也支持查看某次step的具体Tensor值. ...

  4. 一枚通过参数污染绕过百度RASP的XSS

    日常工作过程中,偶然发现一个网站登录页面,在页面返回包中存在一个隐藏参数"mess",且该页面部署了百度RASP进行防护,本文介绍如何发现隐藏参数以及如何通过参数污染方式造成XSS ...

  5. JUC 并发编程--11, AQS源码原理解析, ReentrantLock 源码解读

    这里引用别人博客,不重复造轮子 https://blog.csdn.net/u012881584/article/details/105886486 https://www.cnblogs.com/w ...

  6. MySQL笔记04(黑马)

    今日内容 多表查询 事务 DCL 多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id ...

  7. 尚硅谷Java——宋红康笔记【day25-day29】

    day25 Map接口 一.Map的实现类的结构: |----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) |----HashMap:作为Map的主要实现 ...

  8. Unicode编码转换, MD5加密,URL16进制加密解密

    一.站长网址:http://www.msxindl.com/ 1.Unicode与中文互转 16进制Unicode编码转换.还原   :http://www.msxindl.com/tools/uni ...

  9. noip2008 总结

    noip 2008题解 笨小猴 原题 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设 ...

  10. Windows10 准备/安装Flutter研发环境

    Flutter简介 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台. Flutter 中国 安装Flutte ...