Django简介、安装、配置、迁移命令

[TOC]css

1、Django简介

django安装

版本问题
	1.X    2.X
	统一制定1.11.11
安装
	pip3 install django==1.11.11
测试
	django-admin

wsgiref模块

wsgiref模块能根据功能的不一样拆分红不一样的文件,用户在浏览器窗口输入url之因此能狗获取到相应的资源,是由于后端早已经开设了相应 资源接口。html

wsgiref特色:前端

  1. 先在urls文件中写url与函数的对应关系
  2. 再去views文件中写对应的函数功能块

urls.py:路由与属性函数的对应关系python

views.py:里面就是放的一堆视图函数(视图函数也能够是函数也能够是类)mysql

templates文件夹:里面放的就是一堆HTML文件(模板文件夹)web

大白话:wsgiref模块做用是帮你将复杂的socket链接封装,将用户输入的数据作处理,并把后端发送给浏览器的数据也作处理。sql

from wsgiref.simple_server import make_server

动静态网页

静态网页

数据是写死的,万年不变数据库

动态网页

数据是动态获取的:django

  1. 获取档期那时间
  2. 从数据库中获取数据

jinja2模块

提供了一个能够在HTML页面上书写相似于python后端的 代码,来操做数据(模板语法)flask

pip3 install jinja2 下载安装模块

flask框架模板语法使用的就是jinja2模块,因此只要下载了flask框架,就会自动下载jinja2模块。

模板语法(jinja2)模块语法很是贴近python语法,可是并非全部的框架使用的都是jinja2模块语法

模板语法
		{{}}  变量相关
		{%%}  逻辑相关


在HTML文件内的语法示例:

{{ xxx }}
<p>{{xxx.username}}</p>
<p>{{xxx['password']}}</p>
<p>{{xxx.get('hobby')}}</p>
<p>{{xxx.get('hobby')[0]}}</p>
<p>{{xxx.get('hobby').1}}</p>


{%for user_dict in xxx %}
    <tr>
        <td>{{ user_dict.id }}</td>
        <td>{{ user_dict.name }}</td>
        <td>{{ user_dict.hobby }}</td>
    </tr>
{% endfor %}

web框架

A:socket
	B:路由分发
	C:模板渲染
		django
			A:用的别人的  wsgiref
			B:本身写的
			C:本身写的
		flask
			A:用的被人的  werkzeug
			B:本身写的
			C:用的别人的  jinja2
		tornado
			A,B,C都是本身的。追求速度

python三大主流框架

django

  • 优势:大而全,自身携带的组件和功能特别特别多,功能全面;就相似于塔吊机
  • 缺点:大嘛,因此就笨重,须要的不须要的功能都有。当你只须要盖一间房子的时候,你会用到塔吊机嘛?

flask

  • 优势:小而精,源码600多行(分为请求上下文,应用上下文),自身携带的组件和功能特别特别少,可是第三方支持该框架的模块特别特别多,若是你将flask第三方模块所有叠加起来,甚至能够超过django
  • 缺点:常言你的优势就是你的缺点。所以flask受限于第三方模块,版本更新致使不兼容问题比较常见。

tornado

异步非阻塞,自然支持高并发,甚至能够用它来开发游戏服务器。

django框架

安装及注意事项

  1. 注意事项

    1. 计算机名称不能有中文
    2. 项目文件名也不能用中文
    3. 一个pycharm窗口就是一个单独的完整的项目
  2. 版本问题

    1. 1.x版本

    2. 2.x版本

    3. 3.x版本(目前不用考虑)

      推荐使用1.x版本里面的1.11.09-1.11.13,由于2.x版本才发行不久,新公司或者更换了版本的公司才会使用,通常使用1.8或1.11,现已逐步往1.11转

  3. 安装

    pip3 install django==1.11.11

  4. 测试是否安装成功

    命令行输入:django-admin

建立django项目

  1. 命令行

    1. 建立django项目

      语法:django-admin startproject mysite(项目名)

      效果:建立一个mysite文件夹

    2. 启动django项目(先切换到项目目录下)

      语法:python manage.py runserver 必须在cmd管理员启动(django默认端口是8000)

    3. 建立具备独立功能的app,一般状况下应该能作到见明之义。

      语法:python manage.py startapp app名字

      在Django项目中建立好app以后必定要去settings.py注册才有效

      注意:

      ​ 1.使用命令行建立的django项目是不会自动建立templates模板文件夹的,只能本身手动建立

      ​ 2.命令行建立的django项目不但没有templates文件夹,配置文件中也没有填写路径(而pycharm建立会自动添加)

app的概念

全名application 应用,此app非彼app.

django实际上是一个专一于开发app的web框架,一个空的django项目就相似于一所大学,app就相似于大学里面的各个学院。

每一个app就相似于不一样的功能模块

  • 购物网站
    • 用户相关 user ---用户相关的app
    • 订单相关 order --- 订单相关的app
    • 投诉相关 Complaint --- 投诉相关的app
  • 不一样的功能模块推荐使用不一样的app去开发
  • django支持多app

注册APP

django主要文件功能

mysite
	-mysite
    	--__init__.py
        --settings.py	项目配置文件
        --urls.py	路由视图函数对应关系,项目的总路由
        --wsgi.py
    -manage.py
    app01
    	--migrations文件夹	数据库改动记录
        	----__init__.py
        --__init__.py
        --admin.py	django后台管理
        --apps.py	注册app类
        --models.py	模型类(orm)
        --tests.py	测试文件
        --view.py	视图函数(******)
    db.sqlite3				django自带的一个小型用于本地测试的数据库(对日期格式的数据不是很敏感)

使用django时注意的事项

1.代码修改了始终没有效果:
	1.在同一个端口起了多个服务 一直跑的是最开始的那个服务
	2.浏览器缓存问题
2.建立app以后必定必定要先去setting文件中注册
	1.django可以自动重启 可是它的重启机制
	2.只要检测到你的代码有变化 在必定的时间间隔内就会自动重启
	3.因此有时候可能会出现 你代码还没写完 就已经自动重启了
	


	1.python解释器不要用3.7及以上版本
	2.计算机名称不能有中文
	3.文件名称也尽可能不要用中文
	4.一个pycharm窗口就跑一个django项目

django小白必会三板斧

1.HttpResponse  返回字符串
	return HttpResponse('字符串')
 
2.render	返回html页面
	return render(request,'templates文件夹下的html文件名',{'xxx':'hello world'})
		  页面上就能够经过{{xxx}}拿到hello world
		模板的渲染(将数据在后端按照模板语法放入html对应的位置)
3.redirect 	重定向
	return redirect(url)	# url能够是别人网站的全路径 也能够是本身网站的url后缀
 	return redirect('/index')
 	return redirect('https://www.mzitu.com')

2、静态文件配置

什么是静态文件
		网站所使用到的提早已经写好了的文件
	eg:
		css
			js
			第三方的组件
				bootstrap
				sweetalert
				fontawesome

网站所用到的html文件统一放到templates文件夹中

那针对网站所使用到的静态文件也应该单独找一个文件夹来存储

3、存放静态文件的文件夹

这个文件夹 默认状况下都叫static,须要手动本身建立

static
        -css
        网站所用到的全部的css文件
        -js
        网站所用到的全部的js文件
        -image
        网站所用到的全部的图片文件
        第三方文件

4、Django配置静态文件

1.在settings.py中配置文件

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'static1'),
    os.path.join(BASE_DIR, 'static2')
]
当你的接口前缀正确以后  会拿着后面的路径依次去下面列表中的每个文件夹下查找对应的资源
	顺序是从上往下依次查找 若是都没有找到才会报错

这里的static是文件夹路径

那么问题来了,若是STATIC_URL要修改,其他的所有文件都要修改,及其不方便。咱们怎么办呢?

咱们能够想办法动态绑定,让STATIC_URL不管怎么改变,对应的href前缀跟着改变就解决了。

2.动态绑定

{% load static %}  //相似于import导入
	<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
	<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

3.前期403注释

5、form表单

form表单默认是以get请求提交数据的
	http://127.0.0.1:8000/login/?username=admin&password=123
	
action
		1.不写 默认朝当前地址提交数据
		2.全路径
		3.后缀(/index)

6、获取前端的请求方式

request.method  # 结果是一个纯大写的字符串  GET/POST
request.POST  # 获取post请求提交的数据     相似因而一个大字典
	# <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
get方法:针对只有一个值,用户名、密码
	request.POST.get()  # 只会取列表最后一个元素
request.POST.getlist()  # 取出整个列表,针对对选框、多个值操做

一般状况这样写:

POST请求相似于一个大字典

7、pycharm链接MySQL

​ 须要你本身提早建立好对应的库

1.先去配置文件中配置相关参数
	DATABASES = {
			'default': {
				'ENGINE': 'django.db.backends.mysql',  # 数据库类别
				'NAME': 'jeff',  # 库的名字
				'HOST':'127.0.0.1',
				'PORT':3306,
				'USER':'root',
				'password':'123',
				'CHARSET':'utf8'
			}
		}
		
2.在项目名或者应用名下面的__init__文件中告诉django使用pymysql连接数据库而不是用默认的mysqldb
	import pymysql
	pymysql.install_as_MySQLdb()

8、django orm简介

​ django orm不会帮你建立库 只能帮你自动建立表

orm对象关系映射
类				表
对象			记录
属性			字段值
做用:可以让一个不会数据库操做的小白也可以经过Python面向对象语法 句点符来简单快捷的操做数据

1.模型类

首先须要先去对应的应用下的models.py中书写你的模型类

对于主键id,django orm会自动帮你建立一个名字为id的主键字段。当检测到你建立了主键,那么会使用你本身建立的。若是没有那么会自动帮你建立。

models.py
	class User(models.Model):
		id = models.AutoField(primary_key=True)		// id int primary key auto_increment
		name = models.CharField(max_length=32)		// name varchar(32)
		password = models.IntegerField()			// password int

2.数据库迁移命令,逆向迁移

1.python3 manage.py makemigrations  # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
2.python3 manage.py migrate  # 将改动真正的同步到数据库中
"""
上面两个命令永远是成对出现的 只要你执行了1 就必需要执行2
"""
*******只要你动了models.py跟数据库相关的代码 你就必需要从新执行上面的两条命令来保证数据库与models.py一致***********





3.逆向数据库到模型
python manage.py inspectdb > app名字/models.py

3.获取用户点击的Id,绑定id

对于增删改查都须要先获取用户选择修改的数据id。那么咱们怎么获取呢?

第一步:把用户的id绑定到按钮标签上

咱们能够拼接url:获取用户点击的标签id。绑定id
<a href="/edit_user/?edit_id={{ user_obj.id }}" class="btn btn-primary btn-xs">编辑</a>

第二步:获取绑定到url的用户id

4.字段的增删改查

字段的增
	
		1.create()
			user_obj = models.User.objects.create(name=username,password=password)
			# 该方法有返回值 返回值就是当前被建立的对象自己
		2.对象绑定方法
			# 1 先生成一个User对象
			user_obj = models.User(name=username,password=password)
			# 2 调用对象的绑定方法
			user_obj.save()
字段的查
    1.filter()  //相似于where
    from app01 import models
    res = models.User.objects.filter(username='jason')  # select * from user where 
    # 返回的结果是一个列表  支持索引取值可是不支持负数而且不推荐使用 推荐你使用它给你封装好的方法
		推荐(重):user_obj = res.first()
			# filter方法条件不存在的时候 不会报错返回的是一个空列表
	filter括号内直接放多个关键字参数 而且多个关键字参数之间是and关系
		models.User.objects.filter(username='jason',password='123')
		相似于sql语句:# select * from user where username='jason' and password='123';
	2.查全部的数据
		1.filter() 括号内不写拿全部
		2.all()  拿全部
字段的改 
        # 方式1(推荐)                      批量更新
		models.User.objects.filter(id=edit_id).update(name=username,password=password)
		# 方式2(了解)
		# 1 先获取数据对象
		edit_obj = models.User.objects.filter(id=edit_id).first()
		# 2 再修改对象属性
		edit_obj.name = username
		edit_obj.password = password
		# 3 调用对象的绑定方法保存
		edit_obj.save()

删
	models.User.objects.filter(id=delete_id).delete()  # 将filter过滤出来的数据所有删除

原文出处:https://www.cnblogs.com/guyouyin123/p/12147138.html

相关文章
相关标签/搜索