初识Django

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


https://blog.csdn.net/raoxurou/article/details/121479576

手写web框架

纯手写web框架问题。

  • 代码过于冗余

  • 处理http数据过去繁杂

import socket 


server = socket()
server.bind(('127.0.0.1',8080))
server.listen(5)

while True:
    conn,addr = server.accept()
    data = data.decode('utf8')
    print(data)
    target_url = data.split(' ')[1]
     conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
    if target_url == '/index':
        conn.send(b'from index')
    elif target_url == '/login':
        conn.send(b'from login')
    elif target_url == '/func':
        with open(r'myhtml.html','rb') as f:
            for line in f:
                conn.send(line)
    else:
        conn.send(b'404 error')

wsgiref模块

from wsgiref.simple_server import make_server

def run(request,response):
    """
    :param request:跟请求相关的数据
    :param response: 跟响应相关的数据
    :return: 返回值就是要给前端浏览器的数据
    """
   	response('200 ok',[])
    #print(request) #自动处理所有http协议相关的数据并组织成一个大字典
    target_url = reauest.get('PATH_INFO')
    if target_url == '/index':
        return [b'from index']
    elif target_url == '/login':
        return [b'from login']
    return [b'hello world']


if __name__ == '__main__':
    # 监听127.0.0.1:8080 一旦有请求 立刻将第三个参数加括号调用
    server = make_server('127.0.0.1', 8080, run)
    # 启动服务端
    server.serve_forever()

变化优化

针对后缀较多的情况,优化匹配·

def register():
    return 'register页面'
urls = [
    ('/index',index),
    ('/login',login),
    ('/reg',register)
]

针对同一个py文件内部代码功能繁杂的情况 拆分多个py文件
	views.py		专门用于存放核心业务逻辑
    urls.py			专门用于存放路径对应关系
    templates        专门用于存放html文件
'''以后新增功能只需要views.py写函数 然后urls.py写对应关系即可'''

动静态网页

  • 动态网页
    数据不是写死在html页面上,而是动态获取

  • 静态网页
    数据直接写死在页面上的

jinja2模块

  • 该模块提供了模版语法

  • 支持后端给html页面传递数据并且支持后端语法

    pip install jinja2
    {% for user_list in data_list %}
    {{user_dict}}
    {{user_dict['username']}}
    {{user_dict.get('pwd')}}
    {{user_dict.hobby}}
    
    
    {% for key in user_dict%}
    {{ key }}
    {% endfor %}
    

    将数据库表数据利用模版语法展示到前端页面

    
    
    
    

python主流web框架

django

​ 大而全,内部自带的组件特别多。有时过于笨重

flask

​ 小而精,内部几乎没有什么自带的组件,全部依赖于第三方模块。有时也会出现第三方模块无法兼容的情况

tornado

​ 异步非阻塞

知识科普

  • 同步异步

    • 同步:提交任务之后原地等待任务的返回结果 期间不做任何事
    • 异步:提交任务之后不原地等,有结果通过回调机制反馈
  • 阻塞非阻塞

    • 阻塞:程序被剥夺了CPU执行权限
    • 非阻塞:运行态,就绪态

django框架

  • 主要事项

    • 计算机名称里面不要有中文
    • 项目名和py文件名尽量不使用中文

    下载命令

    pip3 install django==1.11.1
    

    验证下载完成

    django-admin
    

django基本使用

命令行创建django项目

#创建django项目
django-admin startproject 项目名
#运行Django项目
	cd 项目名
  python3 manage.py runserver
#创建app
	python3 manage.py startapp app名字
    
"""
命令行创建不会自动创建templates文件夹,并且配置文件中也不会配置
需要自己创建文件夹并配置
"""

django主要目录结构

  • 同名文件夹

    settings.py

    • django暴露给用户可以自定义的配置文件

    urls

    • 存放路由(路径)与函数(视图函数)对应关系

    wsgi.py

    • 依赖于wsgiref模块的socker启动部分

    manage,py

    • django的入口(启动文件)

    app01文件夹

    ​ mi grations文件夹

    • 里面存放ORM针对数据库相关的记录

    admin.py

    • 每个应用的独立标示

    models.py

    • 与数据库打交道的文件(ORM)

    test.py

    • 自带的测试文件

    db.sqlite3

    • django自带的小型数据库
1.创建app之后一定要去settings.py中注册
	INSTALLED_APPS = [
		# 全写
    	'app01.apps.App01Config',
    	# 简写
    	'app02'
	]
2.templates路径配置
	TEMPLATES = [
    {
      	'DIRS': [os.path.join(BASE_DIR, 'templates')]
     }

Django小白必会三板斧

HttpResponse

返回给前端浏览器文本类的数据

render

	render (request,'index.html'{'n1':[1,2,3]})  #精准传
    render (request,'index.html',locals) #范围传
    #返回给前端页面,并提供模版语法

redirect

重定向
    redirect('https://www.baidu.com')  # 可以写全称
    redirect('/admin/')  # 也可以只写后缀(默认补齐当前IP和PORT)
  
urls.py   存放路由与视图函数对应关系		路由层
views.py  存放视图函数(核心业务逻辑)     视图层
templates文件夹  存放html文件           模板层
models.py  存放与数据库相关的代码(ORM)   模型层

"""
1.django默认的端口号是8000
 	在同一台机器同一时间如果需要运行多个django项目 需要修改端口号
 		python3 manage.py runserver ip:port
 		pycharm自主修改
2.浏览器缓存
	settings
		networks 
			disable cache
"""

静态文件配置

# 利用django编写用户登录功能
	'''为什么前端请求不到后端的框架资源:我们没有开设对应的资源接口'''
    针对静态资源的路径开设无需在urls.py中指定 只需要在配置文件指定即可
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
    	os.path.join(BASE_DIR,'static')
	]
    /static/bootstrap-3.4.1-dist/js/bootstrap.min.js

# 什么是静态文件
	不会频繁更改的文件
    	css文件、js文件、第三方框架文件、图片
# django存储静态文件
	static文件夹
    	该文件内部还可以依据不同的功能划分不同的区域
        	css文件夹
            js文件夹
            img文件夹
            others文件夹
         
# 进阶关系
    STATIC_URL = '/static/'  # 接口前缀(要想访问静态资源 那么路径的前缀就必须是这里指定的)
    # 将static文件夹所有的资源开设给外界
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static'),  # 文件夹名称
        os.path.join(BASE_DIR,'static1'),  # 文件夹名称
        os.path.join(BASE_DIR,'static2')  # 文件夹名称
    ]
    """
    接口前缀正确之后 拿着后面的路径去列表中
    从上往下依查找对应的资源 找到了就不再继续往下找
    """
 
# 接口前缀动态匹配
	{% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

网络请求方式

1.get请求
	朝别人索要数据
    eg:浏览器地址栏输入www.baidu.com回车
        get请求没有请求体
        get请求也可以携带一些的额外的参数 但是大小有限制(2KB)
        	url?xxx=yyy&aaa=bbb
            
2.post请求
	朝别人提交数据
    eg:用户注册登录填写完身份数据之后提交
        post请求有请求体
        post请求也可以携带数据 并且大小没有限制 在请求体中

form表单重要参数

action  # 控制数据提交的地址
	1.写全路径  https://www.baidu.com
	2.写后缀(ip和端口自动补全当前服务器)    /index/
    3.不写  提交给当前页面所在的地址
method  # 控制数据提交的方式
	get  form表单默认是get请求
    post
  
"""
注意使用django前期在提交post请求之前需要去配置文件中注释掉一行代码
	MIDDLEWARE = [
    	# 'django.middleware.csrf.CsrfViewMiddleware',
	]
"""

requests对象方法

request.method  # 获取请求方式名(纯大写的字符串)
request.POST  # 获取post请求提交的普通数据
	request.POST.get()
    request.POST.getlist()
request.GET  # 获取get请求url问号后面的数据	
	request.GET.get()
    request.GET.getlist()
    
def login(request):  
    if request.method == 'POST':
        username = request.POST.get('username')  # 默认只会取列表最后一个元素
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            return HttpResponse('OK')
        else:
            return HttpResponse('用户名或密码错误')
    return render(request, 'login.html')

pycharm链接MySQL

database选项

django链接MySQL(必会)

# 第一步配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'user',
        'USER':'root',
        'PORT':3306,
        'HOST':'127.0.0.1',
        'PASSWORD':'Password123',
        'CHARSET':'utf8'
    }
}
# 第二步配置(3.6及以下解释器 需要额外的配置)
import pymysql
pymysql.install_as_MySQLdb()
'''只要是__init__文件即可 项目的 应用的都可以'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值