day50 django

昨日惠顾

2.借助于第三方模块帮你撸

wsgiref模块 web服务网关接口

​ 帮你封装了socket

​ 帮你处理了HTTP数据 直接封账成一个大字典

​ 也是flask的启动源码

django字典的模板 本身能够承受的并发量很低 大概1000左右

3.基于上面的代码按照功能的不同拆封成不同的文件夹

​ urls.py 路由与视图函数对应关系(视图函数可以使函数也可以是类)

​ views.py 一推处理业务逻辑的视图函数

​ templates 放html文件

如果想要增加一个功能,只要在两个文件中做改动即可。首先在urls.py中新增一组对应关系

4.动静态网页

​ html页面上的数据是否是写死的还是后端动态获取的

5.后端获取时间展示到HTML页面 直接利用字符串的替换完成

6.基于jinja2模板语法,实现后端给HTML页面传值

​ 模板语法是在后端生效的,浏览器是无法识别模板语法,所有的数据渲染全部都是在后端事先生成好的 ,晚会将完整的HTML页面

变量相关 {{}}

逻辑相关 {%%}

7.利用jinja2实现前端 后端 数据库三者结合

8.简易版本的web框架请求流程图

python三大主流框架

django:大而全

flask:小而精

tornado:异步非阻塞

django简介:

注意事项:

​ 1.计算机的名称不能有中文

​ 2.以后索引项目名称也不要有中文

​ 3.python解释器不要使用python3.7 建议使用3.4-3.6

​ 4.一个python窗口只能跑一个项目

版本问题:

​ 1.X 2.X 版本之间有一定的区别

​ 统一使用1.11.11版本,暂时不要使用虚拟环境

pip3 install django==1.11.11

django-admin

创建项目:django-admin startproject mysite

mysite的文件夹,里面有一个文件夹(跟项目名同名)加一个manage.py

启动项目:首先需要切换到项目目录 cd /masite

​ python3 manage.py runserver #默认是本机的8000端口

​ python3 manage.py runserver 127.0.0.1:8888

创建app:

​ app就是类似于具体功能的划分

​ python3 manage.py startapp day01#APP的名字也应该做到见名知意

命令行创建django项目,默认不会主动创建templates文件夹,并且settings配置文件中也没有该文件夹的路径配置。

​ 需要手动配置:DIR:[os.]

创建app需要注意的事项

​ 小白必会三板斧

HTTPresponse 返回字符串

render 返回HTML文件并且支持传值

redirect 重定向 可以写本网站的路径后缀 还可以写其他网站的全路径

以登录功能为例

静态文件配置

1.默认情况下所有的HTML文件都是放在templates文件夹里

2.什么是静态文件:
​ 网站所使用到的提前写好的css js 第三方的前端模块 图片 都叫静态资源

3.默认情况下网站所用到的静态文件资源都会放在static文件夹下
通常情况下,在static文件夹内还会创建其他文件夹

​ css 文件夹
​ js 文件夹
​ font 文件夹
​ img 文件夹
​ bootstrap 文件夹
​ fontawesome 文件夹
为了更加方便的管理文件
django中需要自己手动创建静态文件存放的文件夹

STATIC_URL = '/static/' #访问静态文件资源接口前缀  通常情况下接口的前缀名也叫static 如果后缀是static  就拿路径到下面的文件夹下找
#手动开设静态文件访问资源
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')# 将static文件里面所有的资源暴露给用户 可以有多个,自上往下查找
]

4.静态文件动态绑定

{% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-distcssootstrap.min.css' %}">
    <script src="{%  static 'bootstrap-3.3.7-distjsootstrap.min.js' %}"></script>

form表单默认是get请求,并且get请求也是能够携带参数的

http://127.0.0.1:8000/login/?username=jason&password=jason123
#特点:url?xxx=xxx&yyy=yyy
1.携带的数据不安全
2.携带的数据大小有限制,4KB左右
3.通常只会携带一些不是很重要的数据

form表单里的action参数
​ 1.不写,默认朝当前地址提交
​ 2.只写后缀,/index
​ 3.写全路径

前期在朝后盾提交post请求出现403的情况,需要去配置文件中注释掉一行内容

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',
]

视图函数必须有返回值并且返回值都是HTTPresponse对象(render,HttpResponse,redircet都是HTTPresponse对象)

django后端的视图函数,默认处理的是get请求。但无论是发get还是post请求,都会执行视图函数。

get请求指向拿到login页面,post请求想提交数据,然后后端做校验

如何判断当前请求方式
​ request.method 拿到的是字符串大写的请求方式 GET POST

if request.method == "POST":
	return HttpResponse('收到了')
return render(request,'login.html')

request方法初始

request.method	获取请求方式,并且是纯大写的字符串
如何获取用户提交的post请求数据:
	request.POST
    request.POST.get()	#默认只会获取列表最后一个元素,里面要写属性名
    request.POST.getlist()	#获取列表,里面要写属性名
 如何获取用户提交的get请求数据:
	request.GET
    request.GET.get()	#默认只会获取列表最后一个元素,里面要写属性名
    request.GET.getlist()	#获取列表,里面要写属性名

pycharm连接数据库

django连接mysql

有两部操作:
1.配置文件配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#指定数据库类型
        'NAME': 'day50',#指定库的名字
        'USER':'root',#注意 所有的键都是全大写
        'PASSWORD':'',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'CHARSET':'utf8'
    }
}

2.主动告诉django,不要用默认的MySQLdb连接,而是用pymysql

可以在项目名下的__init__.py中书写,也可以在应用名下的__init__.py中书写

import pymysql
pymysql.install_as_MySQLdb()

django orm简介

为什么要使用数据库:
​ 能够让不会数据库操作的人也能简单方便去操作数据库

orm的缺点:
​ 封装程度高,有时会出现查询效率偏低的问题。
​ 所以工作中:简单的用orm 复杂的追求速度 需要手动书写SQL语句

django中如何操作orm
​ 书写模型类,去应用下的models.py中书写模型类(就是类)

注意:
之后在写django项目的时候,一个django就对应一个数据库,不要出现多个项目使用同一个数据库的情况

数据库迁移(同步)命令:

1. python3 manage.py makemigrations #将数据库的修改记录到小本本上(migrations文件内)
2. python3 manage.py migrate  #将修改操作正在同步在数据库中
注意:
	上面两条命令必须是成双成对出现的,只要修改了models里面跟数据库相关的代码,就必须重新执行上面的两条命令

模型表字段的增删改查

class User(models.Model):
    id=models.AutoField(primary_key=True)#django当你不指定主键的时候,会自动帮你创建一个id字段,并且作为主键,如果自己创建了,django就不会帮你创建
    username=models.CharField(max_length=255)#charField必须要指定max_length参数,CharField就是mysql的varchar
    password=models.CharField(max_length=32)
    #设置默认值
    #方式一:
    email=models.EmailField(default='123@qq.com')
    #方式二:
    phone=models.BigIntegerField(null=True)
    #还可以直接在提示中给默认值,

字段的修改:
​ 直接修改代码,然后执行数据库的迁移命令(两条一条不能少)

字段的增加:
方式一:设置默认值 default=‘嘻嘻嘻’
方式二:允许字段为空 null=True

字段的删除:
直接注释掉对应的字段,然后再执行数据库的迁移命令

模型表数据的增删改查

数据的查

data=models.User.objects.filter(username=username,password=password)## <QuerySet [<User: User object>]>
user_list = models.User.objects.all()# 等价models.User.objects.filter() 所有数据都查出来 里面是一个个的数据对象
user_obj=data[0] 
user_obj.username 

fileter返回的结果是一个“列表”,里面才是数据对象,filter括号内可以放多个关键字参数,这多个关键参数在查询的时候是and关系

数据的增

models.User.objects.create(username=username,password=password)# create方法 会有返回值 返回值就是当前被创建的数据对象本身

数据的改

models.User.objects.filter(id=edit_id).update(username=username,password=password)
#批量操作,会将filter查询出来的列表中所有的对象都更新

数据的删

models.User.objects.filter(id=delete_id).delete()
#批量操作,会将filter查询出来的列表中所有的对象都删除
原文地址:https://www.cnblogs.com/zqfzqf/p/11924278.html