ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django框架学习 5.25

2020-05-25 16:52:46  阅读:272  来源: 互联网

标签:username 框架 models py request django 5.25 static Django


5.25

上周内容回顾

纯手写web框架

  • socket代码需要自己写
  • http格式的数据要自己处理,只能拿到用户输入的路由

基于wsgiref模块:web服务网关接口

  • 帮助你封装了socket代码
  • 帮你处理了http格式的数据,得到一个大字典(env)
  • 监听一个地址,请求来的时候帮你拆分http格式封装成方便处理的数据格式
  • 响应走的时候再帮你把数据打包成符合http格式的数据

根据功能的不同,拆分成不同的py文件

  • urls.py:路由与视图函数对应关系
  • views.py:业务逻辑的视图函数,也可以是类
  • templates模板文件夹:存储html文件

动静态网页

  • 根据html页面是写死的还是从后端动态获取的区分

  • 如何将后端的数据传递给html

    • jinja2模板语法

      {{user_list}}
      {%for i in user_list%}
      

      jinja2的模板语法比较贴近python语法,有时候比python更加简单

python三大主流web框架

  • django:大而全,有时候过于笨重
  • flask:小而精,第三方组件很多
  • tornado:异步非阻塞

注意事项

  • 计算机名称不能有中文
  • 一个pycharm窗口不要打开多个项目,不要出现文件夹套文件夹
  • 文件名也不要出现中文
  • python解释器版本建议3.6,django建议1.11版本

django必会命令

1. 创建django项目
先切换到一个盘中 D:
django-admin startproject mysite

2. 启动django项目
python3 manage.py  runserver 127.0.0.1:8080

3. 创建应用
python3 manage.py startapp app01

一个django项目就是一个空壳,本身没有任何内容,应用类似于一个个的功能模块

创建应用之后一定要去配置文件settings中注册才会生效

INSTALLED_APP = {
	'app01'
	'appo1.apps.App01Config'
}

命令行创建应用,不会自动创建templates文件夹,也不会自动配置路径

DIR:[os.path.join(BASE_DIR,'templates')]

pycharm会自动创建并自动配置路径,会自动主次一个应用

django主要文件介绍

mysite
  - mysite
    - urls.py
    - settings.py
    ...
  - manage.py
  - app01.py
  - tests.py
  - modles.py
  - views.py

django小白3必会

form django.shortcuts import HttpResponse,render,redirect

return HttpResponse('字符串')
return render(request,'login.html')
return redirect(url)

html获取视图函数发来的值

# 视图函数中
return render(request,'index.html',data)
# 指名道姓传data

return render(request,'index.html',locals())
# 传回局部名称空间中所有的数据

今日内容

以登陆功能为例

  • 静态文件配置
  • request对象方法初始
  • pycharm连接数据库MySql
  • django连接数据库
  • django ORM简介
  • 利用ORM实现数据的增删改查操作

先大致掌握django的功能,后面再详解

静态文件配置

登陆功能

  1. 创建应用

  2. 注册url

  3. 在视图函数里添加login函数

  4. 创建login的html文件,放在templates文件夹下

    将网站使用的静态文件默认放在static文件夹下

    静态文件:前端写好的,直接调用展示的都是静态文件,如css,js文件,需要用到的图片文件以及框架
    
    django不会给你船舰static文件夹,需要自动创建
    static文件夹下再创建几个文件夹:js,css,img,bootstrap
    
    在浏览器中输入url能够看到对应的资源,是因为后端提前开了该资源的接口,所以对静态文件,应该提前开放访问的接口
    

静态文件配置方法

settings-->STATIC_URL

STATIC_URL = '/static/' # 类似访问的令牌,一旦发现连接是以static开头,就允许连接到static列表里面找文件
# link href="/static/css/..."
# 令牌可以换别的
STATICFILES_DIRS = [
	os.path.join(BASE_DIR,'static')
]
# 再在网页中引用静态文件,使用/static/开头

当你在写django项目的时候,可能会出现后端代码修改了但是前端页面没有变化的情况

  1. 在同一个端口开了好几个django项目,在跑的其实是第一个django项目
  2. 浏览器缓存问题,setting,network,disable cache勾选上

动态解析static令牌

{% load static}
<link href="{% static 'bootstrap-3.3.7......'}">

登陆页面

  1. 先写一个form表单,input用户名,password,class=form-control
  2. input,type=submit
  3. form表单默认是get,改method为post,改action为login后缀
  4. 前期提交的时候遇到403,就去注释掉中间键MIDDLEWARE

判断当前请求方式

request.method # 得到请求方式
# GET或POST,可以在视图函数中进行判断,人为的区分
if request.method =='GET':
	return 'GET'
# 获取用户提交的数据,一个字典
print(request.POST)
username = request.POST.get('username')
# 拿到username列表的最后一个元素:字符串格式
request.POST.getlist('username')
# 获取整个列表,list类型
return 'POST'

request对象方法初始

request.method
# 获取当前请求的类型,得到字符串GET或POST
request.POST
# 获取用户提交的post请求数据,得到一个字典
request.GET
# 获取用户提交的GET请求数据,得到一个字典
request.POST.get('username')
# 拿到username列表的最后一个元素:字符串格式
request.POST.getlist('username')
# 获取整个列表,list类型
request.GET.getlist('username')
# 获取整个列表,list类型,用法跟post一模一样

get获取的数据大小有限制,post没有限制

pycharm连接数据库

右侧,database,+,data source,mysql

一定要先安装对应的驱动:download missing driver

在当前项目文件夹下先创建一个库,再连接

django连接MySQL

settings中自带一个小数据库sqllite3

# settings.py
DATABASE = {
	'deafult':{
		'ENGINE':'django.db.backends.mysql',
		'NAME':'db1' # 库名
		'USER': 'root',
		'PASSWORD':'6008',
		'HOST': '127.0.0.1',
		'PORT': '3306',
		'CHARSET':'utf8'
	}
}
# 完成配置settings之后,django默认用mysqldb模块连接,但是该模块兼容性不好,需要手动改为pymysql连接
# 需要告诉django不要用默认的MySQLdb,而是用pymysql

# 在项目名下的init内打个补丁
import pymysql
pymysql.install_as_MySQLdb()

Django ORM

orm:对象关系映射,能够让一个不懂sql语句的人也可以通过python面向对象的代码简单快捷的操作数据库

不足:封装程度太高,有时候效率低

models.py

先在models.py中写一个类

from django.db import models
class User(models.Model):
    # id int primary_key auto_increment
	id = models.AutoField(primary_key=True)
    # username varchar(32)
	username = models.CharField(max_length = 32)
    # password int
	password = models.IntegerField()
	# 相当于创建了三个字段
	
class Author(models.Model):
	# 由于一张表中必须要偶一个主键,并且一般情况都叫id,所以orm当你不定义主键字段的时候,orm会自动创建一个名为id的主字段
	username = models.CharField(max_length = 32)
    # charfield必须指定max_length参数,不指定会报错
    # 还可以指定verbose_name,对字段进行注释
	password = models.IntegerField()

数据库迁移命令

只要修改了数据库,就要执行以下代码

python3 manage.py makemigrations
将操作记录到migration文件夹

python3 manage.py migrate
将操作真正同部到数据库中

利用orm实现字段增删改查

# 字段的增加,三种方法
1.可以在终端内直接给出默认值
2.该字段可以为空
    info = models.CharField(max_length=32,verbose_name='个人简介',null=True)
3.直接给字段设置默认值
    hobby = models.CharField(max_length=32,verbose_name='兴趣爱好',default='study')
# 字段修改
修改代码,再执行数据库迁移的两条命令即可
# 字段删除
把对应的字段注释,再执行两条命令
不要轻易删除操作

数据的增删该查

查询:filter

获取用户名的密码,利用orm操作数据,校验数据是否正确

from app01 import models
res = models.User.objects.filter(username=username)
print(res) # 一个列表,套着数据对象
# 类似于selec * from user where username = username
# filter括号内可以携带多个参数,参数与参数之间默认是and关系
user_obj = res[0] # 拿到user对象
# 也可以使用res.first() 拿到第一个
user_obj.username
user_obj.password # 拿到数据

# 进行逻辑判断

增加

# 第一种
from app01 import models
res = models.User.objects.create(username=username,password=password)

# 第二种,利用对象.属性,对象.save()
user_obj = models.User(username=username,password=password)
user_obj.save()  # 保存数据

标签:username,框架,models,py,request,django,5.25,static,Django
来源: https://www.cnblogs.com/telecasterfanclub/p/12957782.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有