Django框架初识
python三大主流web框架
# django 特点:大而全 自带的功能特别特别特别的多 类似于航空母舰 不足之处: 有时候过于笨重 # flask 特点:小而精 自带的功能特别特别特别的少 类似于游骑兵 第三方的模块特别特别特别的多,如果将flask第三方的模块加起来完全可以盖过django 并且也越来越像django 不足之处: 比较依赖于第三方的开发者 # tornado 特点:异步非阻塞 支持高并发 牛逼到甚至可以开发游戏服务器 不足之处: 暂时你不会 """ A:socket部分 B:路由与视图函数对应关系(路由匹配) C:模版语法 """ #=========== # django A用的是别人的 wsgiref模块 B用的是自己的 C用的是自己的(没有jinja2好用 但是也很方便) # flask A用的是别人的 werkzeug(内部还是wsgiref模块) B自己写的 C用的别人的(jinja2) # tornado A,B,C都是自己写的
Django注意事项:(Django正常运行条件)
# 如何让你的计算机能够正常的启动django项目 1.计算机的名称不能有中文 2.一个pycharm窗口只开一个项目 3.项目里面所有的文件也尽量不要出现中文 4.python解释器尽量使用3.4~3.6之间的版本 (如果你的项目报错 你点击最后一个报错信息 去源码中把逗号删掉) # django版本问题 1.X 2.X 3.X(直接忽略) 1.X和2.X本身差距也不大 我们讲解主要以1.X为例 会讲解2.X区别 公司之前用的1.8 满满过渡到了1.11版本 有一些项目用的2.0 # django安装 # pip3 install django==1.11.11 如果已经安装了其他版本 无需自己卸载 直接重新装 会自动卸载安装新的 如果报错 看看是不是timeout 如果是 那么只是网速波动 重新安装即可 验证是否安装成功 终端输入django-admin看看有没有反应
Django基本操作
命令行操作
1、创建Django项目
C:\Users\dell>E: # 先从C盘切到E盘 E:\>cd django_project #进入之前创建的总的django项目目录,注意Django所有目录名不能出现中文 E:\django_project>django-admin startproject mysite # 在目录下创建名为mysite的项目 E:\django_project>
2、到E:\django_project目录下查看创建的项目
3、启动Django项目
# 注意: 启动项目时,一定要在命令行终端先切换到项目目录下。
例如:上面创建的mysite项目,要先进入到E:\django_project\mysite\里面
E:\django_project>cd mysite E:\django_project\mysite>python3 manage.py runserver # ps: # python3 manage.py runserver 这个命令如果后面不跟ip和端口,默认是本机ip:127.0.0.1,端口是本机8000端口 # 如果后面跟ip和端口: # python3 manager.py runserver 127.0.0.1:9090
命令执行情况:
停止的方法:
ctrl + c
在浏览器访问这个链接:
4、创建应用(要先切换到项目目录)
注意网页提示的"Next, start your first app by running python manage.py startapp [app_label]
.";这句话意思就是:接下来,通过运行python manager .py startapp [app_label]命令启动您的第一个应用程序。。
创建命令就是:
# python manage.py startapp [app_label] #[app_label]是创建的app名字
例如:
# python3 manage.py startapp app01 #创建名为app01的应用
ps:
应用名应该做到见名知意
user
order
web
...
# 应用说明
""" django是一款专门用来开发app的web框架 django框架就类似于是一所大学(空壳子) app就类似于大学里面各个学院(具体功能的app) 比如开发淘宝 订单相关 用户相关 投诉相关 创建不同的app对应不同的功能 选课系统 学生功能 老师功能 一个app就是一个独立的功能模块 """
# 开始创建
先停止之前的项目,之后创建应用,创建应用也要在项目目录下,E:\django_project\mysite\里面
E:\django_project\mysite>python3 manage.py startapp app01
E:\django_project\mysite>
执行完创建应用命令;会在项目目录生成对应的文件夹
创建完应用一定要到配置文件中注册
""" ***********************创建的应用一定要去配置文件中注册********************** INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', # 全写 'app01', # 简写 ] # 创建出来的的应用第一步先去配置文件中注册 其他的先不要干 ps:你在用pycharm创建项目的时候 pycharm可以帮你创建一个app并且自动注册 ***********************************************************************
主要文件介绍
E:\django_project\mysite文件夹下:
manage.py # Django的入口文件 db.sqlite3 # Django自带的sqlite3数据库(小型数据库,功能不是很多,还有bug)
E:\django_project\mysite\mysite\文件夹下:
settings.py # 项目配置文件 urls.py # 路由与视图函数对应关系(路由层) wsgi.py # web服务网关接口
ps:wsgiref模块补充
#web服务网关接口 1.请求来的时候解析封装 响应走的时候打包处理 2.django默认的wsgiref模块不能承受高并发 最大只有1000左右 上线之后会替换成uwsgi来增加并发量 3.WSGI跟wsgiref和uwsgi是什么关系 WSGI是协议 wsgiref和uwsgi是实现该协议的功能模块
E:\django_project\mysite\mysite\app01\文件夹下:
admin.py # Django的后台管理 apps.py # 注册使用 migrations文件夹 # 数据库迁移记录 models.py # 数据库相关的模型类(orm) tests.py # 测试文件 views.py # 视图函数(视图层)
Pycharm创建Django项目
1、点击file-New Project
注意:每创建一个Django项目就New Project,不要创建文件夹方式,还有项目路径不能出现中文
2、创建完毕后,查看
templates # 存放html文件
注意:和命令行创建的对比(两者区别)
命令行创建的项目文件夹
# 1 命令行创建不会自动有templatew文件夹 需要你自己手动创建而pycharm会自动帮你创建并且还会自动在项目配置文件settings.py中配置对应的路径 # pycharm创建 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] ] # 命令行创建 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], ] """ 也就意味着你在用命令创建django项目的时候不单单需要创建templates文件夹还需要去配置文件中配置路径 'DIRS': [os.path.join(BASE_DIR, 'templates')]
3、启动项目
点绿色三角:
4、创建应用
方法一:在pycharm的terminal终端窗口直接输入:
# python3 manage.py startapp app01
方法二:点击Tools-Run manage.py Task...
在下面的窗口中直接输入:(输命令时还会有提示)
注意:创建的应用一定要去配置文件注册
""" ***********************创建的应用一定要去配置文件中注册********************** INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', # 全写 'app01', # 简写 ] # 创建出来的的应用第一步先去配置文件中注册 其他的先不要给我干 ***********************************************************************
创建app遇到的问题:
# python3 manage.py startapp app01 命令行创建app时提示如下报错
TypeError: unsupported operand type(s) for /: 'str' and 'str'
解决:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', # 'DIRS': [BASE_DIR / 'templates'] 'DIRS': [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', ],
在settings.py中找到上面代码,把DIRS那行注释掉,用下面一行代替即可解决问题。
django1.11 启动错误:Generator expression must be parenthesized
解决参考:https://blog.csdn.net/qq_28194001/article/details/86709006
5、settings.py内容说明
""" Django settings for day59 project. Generated by 'django-admin startproject' using Django 1.11.11. For more information on this file, see https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ 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/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '#(p@%sm3&&+w@3i)i_+)z223xpehj52*uy7znl@welx$w4)q&s' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True # 上线之后改为False ALLOWED_HOSTS = [] # 允许访问的主机,上线之后改为"*" # Application definition # 注册的app(app就是功能模块) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', ] # Django中间件 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 = 'day59.urls' # HTML文件存放路径配置 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 = 'day59.wsgi.application' # Database # https://docs.djangoproject.com/en/1.11/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/1.11/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/1.11/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/'
6、pycharm中改项目端口号的方法
注意如果没有三角为灰色也可以通过这个创建
Django小白必会三板斧
# HttpResponse 返回字符串类型的数据 return HttpResponse("你好啊,我是Django") # render 返回html文件的 return render(request,"index.html") # redirect 重定向 return redirect('https://www.mzitu.com/') return redirect('/home/')
render补充:
def ab_render(request): # 视图函数必须要接受一个形参request user_dict = {'username':'jason','age':18} # 第一种传值方式:更加的精确 节省资源 # return render(request,'01 ab_render.html',{'data':user_dict,'date':123}) #第三个参数:键对应html获取的变量名,值对应html获取的变量名对应的值 # 第二种传值方式:当你要传的数据特别多的时候 """locals会将所在的名称空间中所有的名字全部传递给html页面""" return render(request,'01 ab_render.html',locals())
示例:
目录:
主要文件代码:
settings.py #注册app
# 注册的app(app就是功能模块) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', #注册的app ]
urls.py # 添加路由
from django.conf.urls import url from django.contrib import admin from app01 import views #导入app01下的视图层 urlpatterns = [ url(r'^admin/', admin.site.urls), # 写我们自己的路由与视图函数对应关系,这里我们可以根据功能的不同执行不同的app下面的views url(r'^index/', views.index), ]
app01下面的views.py #添加视图函数
from django.shortcuts import render,HttpResponse,redirect # Create your views here. # /index def index(request): """ :param request: 请求相关的所有数据,比之前用wsgrief模块实现传给函数的env大字典更厉害,request这是个对象 :return: """ # return HttpResponse("你好啊,我是Django") return render(request,"index.html") #自动去templates文件夹下帮你查找文件
django设置响应头