上一版,我们进行了Django环境的安装,那么这一次就开始正式使用了。
那么现在我们需要先进入到我们之前创建的环境中。。。
我这里是windows 10系统,本次就以它为主讲:
(1)首先需要先进入自己的目录,windows键+R 打开快捷窗口,输入cmd ,进入操作窗口
(2)我这边就直接重新创建一个,且创建完毕后会 直接进入虚拟环境
(3)创建项目,命令: django-admin startproject Test (Test可以随意命名)
同时当前目录下就会新增一个Test文件
让我们看一看这下面有什么?
(4)运行django环境,命令 :python manage.py runserver ,注意:后面可以接端口号 和IP地址,比如:python manage.py runserver 8089 ,这样的话,访问网址只需要更改端口即可
,可以直接用浏览器访问 :http://127.0.0.1:8000/
这样就代表成功了
(5)创建app
输入命令:python manage.py startapp Hello # Hello是app名称
此处可能会遇到ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH。。。类似的问题,不要慌,默默的在pycharm中找到 file--->setting ---> Python Interpreter--->+ --->重新搜索django,安装下,然后重启cmd窗口即可
创建后目录:
6.配置
(1) 配置静态文件
此处需要说明,可以在Test目录下创建一个Templates的目录,用户存放静态文件(html)
对于静态文件,也就是 我们Templates
存放html
文件视图所对应相关的JS
,CSS
,图片
存放的对方 通常我们在 程序目录下建立一个文件夹->static
(这里写死就可以了,不要换别的名字)
在settings.py
文件下添加如下配置,意思是在视图对应的静态文件会自动在static
目录下检索
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
(2)配置模板文件
要是我们Templates
存放的文件生效,需要如下配置,意思是模板文件在templates
文件夹下进行检索
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)
7.底层实现原理讲解
(1)业务流程原理
url请求---->访问路由系统(负责分发请求到相应视图函数)------>视图函数(处理请求)------>DataBase(数据库操作数据生成对应页面返回给用户)
(2)底层实现原理
本质是Django
就是一个Socket
服务端,用户的浏览器其实就是一个Socket
客户端.用户访问网站的过程就是服务端与客户端Socket
通信的过程
# Author:TianTianBaby
import socket
def handle_request(client):
buf = client.recv(1024)
client.send("HTTP/1.1 200 OK\r\n\r\n".encode())
f = open('index.html', 'rb')
data = f.read()
client.send(data)
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8000))
sock.listen(5)
while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()
if __name__ == '__main__':
main()
8.Django简单登录的实现
(1)在自己建立的APP 里的Views
中添加逻辑函数 login
render
这个模块相当于一个 open
读取html
文件中的数据返回给浏览器
from django.shortcuts import render,redirect
def login(request):
# request 包含用户提交的所有信息
error_msg = ""
if request.method == 'POST':
# 获取用户通过post 提交过来的数据
user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)
if user == 'admin' and pwd == "admin":
#跳转到响应页面 ("/"相当于前面的地址127.1.0.0:8000)
return redirect('/home')
else:
#用户名密码不匹配
error_msg = "错了 !!!!天啊!!"
//error_msg 替换html文件 相同字段文字
return render(request, 'login.html',{'error_msg':error_msg})
(2) 登录函数逻辑所对应的 templates
文件中的login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<style>
label{
width: 80px;
text-align: right;
display: inline-block;
}
</style>
</head>
<body>
<form action="/login/" method="post" style="background-color: cadetblue">
<p>
<label for="username">用户名</label>
<input id="username" name="user" type="text"/>
</p>
<p>
<label for="password">密码</label>
<input id="password" name="pwd" type="text"/>
<input type="submit" value="提交">
//error_msg 替换请求 相同字段文字
<span style="color: red">{{ error_msg}}</span>
</p>
</form>
</body>
</html>