django 目录 静态文件配置 request对象 django连接mysql
# 手敲web框架
借助于socket模块启动服务器,针对于http协议数据自己人为处理(切割)
# 借助于wsgiref
内部封装了socket 以及针对http格式数据处理
#代码优化
拆分代码
根据不同功能拆分
views.py 存放主要函数 urls.py存放对应关系
#动静态网页
网页数据的来源,静态是写死的 动态获取
#jinja2模板语法
能够支持后端将数据传递给html页面并且在该页面上使用类似于后端的语法来操作数据
#python主流web框架
django 大而全
flask 小而精
tornado 异步非阻塞
#django下载与使用
pip3 install django==1.11.11 #指定版本号
#命令行
django-admin startproject mysite #创建django项目
cd mysite
python3 manage.py runserver ip:port #运行django
python3 manage.py startapp app01 #创建app
"""
django项目与app之间的关系
django项目是空壳子 app才是真正的核心 相当于一个个独立的功能模块
"""
# 命令行操作不会自动帮你创建templates文件夹并且也不会在文件中配置
# django启动报错的各种情况
1.python解释器问题
widgets.py多了个逗号
2.由于版本问题导致配置文件配置项错误
[os.path.join(BASE_DIR,'templates')]
3.计算机名称和py文件等名称尽量不要使用中文
1.django主要目录结构
2.django小白必会三板斧
3.静态文件配置(登录功能)
4.requests对象方法
5.pycharm链接MySQL
6.django链接MySQL
django主要目录结构
mysite同名文件夹
settings.py
urls.py
wsgi.py
manage.py文件
app01文件夹
migrations文件夹
admin.py
apps.py
models.py
tests.py
views.py
db.sqlite3
"""
1.创建app之后一定要去settings.py中注册
INSTALLED_APPS = [
# 全写
'app01.apps.App01Config',
# 简写
'app02'
]
2.templates路径配置
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'templates')]
}
"""
django是可以自动重启的 但是有时候自动重启的反应时间有点长
django小白必会三板斧(在函数里返回使用)
from django.shortcuts import render,HttpResponse,redirect
1.HttpResponse
return HttpResponse('sss')
暂且理解为可以返回给前端浏览器文本类的数据
2.render
return render(request,'index.html',{'n1':[1,2,3],'haha_list':['dijia','sg','sb']})
render(request,'index.html',locals())
返回给前端浏览器html页面 并且提供模板语法
3.redirect
重定向
return redirect('https://www.4399.com')
return redirect('/admin/')
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
"""
静态文件配置(登录功能)
网站提前写好不会频繁更改的文件,比如css,js,第三方框架文件,图片等
static文件夹 自己创建
里面还可以根据不同功能分 css,js,image,other,等这些个文件夹
以后放在nginx 现在先放在这 css js img 三个最基本的
http://127.0.0.1:8000/static/bootstrap-3.4.1-dist/css/bootstrap.min.css
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
'''
如果想访问静态文件 需要在STATICFILES_DIRS里添加路径
os.path.join(BASE_DIR,'static')
访问静态文件时候 先要先接口前缀就是STATIC_URL=的东西 然后再去下面的STATICFILES_DIRS里面查找路径 有多个路径时候从上往下匹配 匹配到就退出
'''
{% 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) 在网址那栏问号后面xxx=xxx这些就是
url?xxx=yyy&aaa=bbb
2.post请求
朝别人提交数据
eg:用户注册登录填写完身份数据之后提交
post请求有请求体
post请求也可以携带数据 并且大小没有限制 在请求体中
form表单重要参数
action:数据提交的地址
三种方式
1.全路径 https://www.baidu.com
2.写后缀 /index/ 前面会加上本机ip加端口
3.不写 哪个路径打开就往那个页面打开
method:提交方式
get 默认get请求
post
"""
注意使用django前期在提交post请求之前需要去配置文件中注释掉一行代码
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
"""
request对象方法
request.method 获取当前请求方法名(以纯大写字符串显示)
request.POST
<QueryDict: {'username': ['zhang'], 'password': ['z123']}>
print(request.POST)
print(request.POST.get('username'))
<QueryDict: {'username': ['zhang', 'Alvins.chen', 'asdasdd'], 'password': ['123']}>
asdasdd
print(request.POST.getlist('username'))
['zhang', 'Alvins.chenaa', 'zhangaa']
request.GET
request.GET.get(xxx)
request.GET.getlist(aaa)
<QueryDict: {'xxx': ['123'], 'aaa': ['456']}>
123
['456']
优化了一下
def login(request):
if request.method=='POST':
print(request.POST)
username=request.POST.get('username')
password=request.POST.get('password')
if username=='zhang' and password=='123':
return HttpResponse('登陆成功')
else:
return HttpResponse('账号或者密码错误')
return render(request, 'login.html')
pycharm链接MySQL
点database 连接 mysql 输入用户名密码数据库名称 测试连接 如果失败 更换一下连接dirver驱动mysql5.1
链接之后操作就好了
django连接MySQL
修改settings 里的DATABASES=[]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db4_3',
'USER':'root',
'PORT':3306,
'HOST':'127.0.0.1',
'PASSWORD':'123',
'CHARSET':'utf8'
}
}
注意左面全是大写 密码也要加引号
import pymysql
pymysql.install_as_MySQLdb()