day 03 django 目录 静态文件配置 request对象 django连接mysql

day 03 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主要目录结构

#先创建一个django项目名字是mysite
mysite同名文件夹
    	settings.py # django暴露给用户可以自定义配置的文件
         urls.py # 存放路由(路径)与函数(视图函数)对应关系
         wsgi.py # 依赖于wsgiref模块的socket启动部分
    manage.py文件 # django的入口(启动)文件
    app01文件夹 #app文件目录
    	migrations文件夹 # 里面存放ORM针对数据库相关的记录
        admin.py # django自带的后台管理功能
        apps.py # 每个应用的独立标识
        models.py # 与数据库打交道的文件(ORM)
        tests.py # 自带的测试文件
        views.py # 该app对应的主体功能(函数 类)
    db.sqlite3 # django自带的小型数据库(针对日期格式无法精准存取)
"""
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  #在views里导入记得,三大板斧都在这个模块里

1.HttpResponse
	return HttpResponse('sss')
	暂且理解为可以返回给前端浏览器文本类的数据
2.render
	#指向的页面直接写名字就可以 因为在之前配置了'DIRS': [os.path.join(BASE_DIR, 'templates')] 让templates变成全局的
	return render(request,'index.html',{'n1':[1,2,3],'haha_list':['dijia','sg','sb']})  # 精准传(复杂但节省资源)  不需要jinja2模块就可以传给前端
    render(request,'index.html',locals())  # 范围传(简单但不节省资源) 将当前名称空间全部名字都传给index
	#render 写网址记得加引号 切记 切记 切记
    返回给前端浏览器html页面 并且提供模板语法
3.redirect
	重定向
    return redirect('https://www.4399.com')  # 可以写全称
    return 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
"""

静态文件配置(登录功能)

#啥是静态文件
	网站提前写好不会频繁更改的文件,比如css,js,第三方框架文件,图片等
#静态文件位置
	static文件夹 自己创建
    	里面还可以根据不同功能分 css,js,image,other,等这些个文件夹
        以后放在nginx 现在先放在这    css js img 三个最基本的
#发现他是请求这个 bootstrap的效果没有用  urls 没有定义这个所以请求不到 没有开设对应的资源接口
	http://127.0.0.1:8000/static/bootstrap-3.4.1-dist/css/bootstrap.min.css
# 解决方法 找到settings 配置 针对静态资源的路径开设无需在urls.py中指定 只需要在配置文件指定即可

STATIC_URL = '/static/'      #接口前缀 (要想访问静态资源 路径前缀必须在这里指定)
#####如果想访问静态资源 就要以上面设定的开头,他就会把下面所有的资源暴露给你,

#将static文件夹下的所有资源开放给外界
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static') #这个static文件夹名称
]

#这两个static之间的关系
	STATIC_URL = '/static/' 
    #STATIC_URL代表的是接口前缀
	STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static') #这个static文件夹名称
]
'''
如果想访问静态文件 需要在STATICFILES_DIRS里添加路径
os.path.join(BASE_DIR,'static')
访问静态文件时候 先要先接口前缀就是STATIC_URL=的东西 然后再去下面的STATICFILES_DIRS里面查找路径 有多个路径时候从上往下匹配 匹配到就退出
'''

#接口前缀指定后 如果引入静态文件很多 就得一个个修改 形成了强耦合 针对这种情况  可以接口前缀动态匹配   {% load 接口前缀%}
{% 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  #获取用户提交的post数据 如果显示空字典是因为在前段没有输入框没有指定name名字 就相当于没有指定key,不指定不会提交到后端,所以显示空字典    
#正常应该这样  这个只是获取用户提交的普通数据,不包含文件等
<QueryDict: {'username': ['zhang'], 'password': ['z123']}>

#如果有多个usernamekey 他会获取最后一个比如
    print(request.POST)
    print(request.POST.get('username'))
        <QueryDict: {'username': ['zhang', 'Alvins.chen', 'asdasdd'], 'password': ['123']}>
        asdasdd
#获取某个key的所有值     request.POST.getlist  
print(request.POST.getlist('username'))
	['zhang', 'Alvins.chenaa', 'zhangaa']

#get请求
request.GET #获取get请求问号后面的数据

    request.GET.get(xxx)

    request.GET.getlist(aaa)
#输出结果
<QueryDict: {'xxx': ['123'], 'aaa': ['456']}> 
123
['456']



优化了一下
def login(request):
    if request.method=='POST':
#     #2获取用户提交的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

#他可能会使用自己自带的sqllite小型数据库  需要指定数据库
修改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'
    }
}
注意左面全是大写  密码也要加引号

#继续配置(3.6 以下解释器需要配置) 任意一个__init__文件里
import pymysql
pymysql.install_as_MySQLdb()


你可能感兴趣的:(django,数据库,python,mysql)