请求(request)
请求方法 路径 HTTP/1.1\r\n
k1:v1\r\n
...\r\n
\r\n
请求体 <-- 可以有,可以没有
响应(response)
HTTP/1.1 状态码 状态描述符\r\n
k1:v1\r\n
Content-Type: text/html; charset=utf8\r\n
\r\n
响应正文 <-- HTML内容
socket服务端 与 浏览器的通信
一个完整得请求流程:
a. 收发socket消息 --> 按照HTTP协议消息格式去解析消息
b. 路径和要执行的函数的对应关系 --> 主要的业务逻辑
c. 字符串替换(动态的网页的本质,在服务端替换) --> 模板(特殊符号 --> 数据)
按上面三个功能划分:
其中,LTS版本是持续提供后续支持的版本,推荐使用。
pip3 install django==1.11.11
==
后面加版本号,否则安装的是最新版的Django。
使用清华大学的镜像源:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11
命令行创建:
django-admin startproject mysite
需要将django-admin.exe所在路径加到系统环境变量中去。
pycharm创建:
File --> New project --> 左侧选Django -->
pycharm需要是专业版的,社区版的不支持创建Django
注意:点击create后一定要选择在新窗口中打开项目
python3 manage.py startapp app名字
命令行启动
在项目的根目录下(也就是有manage.py的那个目录),运行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
python3 manage.py runserver 端口 --> 在指定的端口启动
python3 manage.py runserver --> 默认在本机的8000端口启动
Pycharm启动
点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)
STATIC_URL = ‘/static/‘
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
why
what
python语法 --自动翻译--> SQL语句
jQuery DOM
$("#d1") --自动翻译--> document.getElementById("d1")
ORM的对应关系:
类 ---> 数据表
对象 ---> 数据行
属性 ---> 字段
ORM能做的事儿
操作数据表 --> 创建表/删除表/修改表
操作models.py里面的类
操作数据行 --> 数据的增删改查
不能创建数据库,自己动手创建数据库
自己动手创建数据库
create database 数据库名 default charset=‘utf8‘;
在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
# 数据库相关的配置,项目名/settings.py文件
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘, # 连接的数据库类型
‘HOST‘: ‘127.0.0.1‘, # 连接数据库的地址
‘PORT‘: 3306, # 端口
‘NAME‘: "day61", # 数据库名称
‘USER‘: ‘root‘, # 用户
‘PASSWORD‘: ‘123456‘ # 密码
}
}
告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库
在项目/__init__.py
文件中,写下面两句:
import pymysql
# 告诉Django用pymysql来代替默认的MySQLdb
pymysql.install_as_MySQLdb()
在app下面的models.py文件中定义一个类,这个类必须继承models.Model
class 类名(models.Model):
字段名 = models.字段类型(设置选项)
......
执行两个命令
在models.py
中创建类或者修改类之后需要执行下面两个命令
相当于将改动记录下来
python3 manage.py makemigrations
相当于将改动发送到数据库中执行
python3 manage.py migrate
查询
models.UserInfo.objects.all()
增加
models.UserInfo.objects.create(name="张三")
urls.py
:
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r‘^login/‘, views.login),
url(r‘^user_list/‘, views.user_list),
url(r‘^add_user/‘, views.add_user),
]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录注册示例</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
<style>
body{
background-color: #eeeeee;
}
#login-box{
margin-top: 100px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div id="login-box" class="col-md-4 col-md-offset-4">
<h3 class="text-center">请登录</h3>
<form class="form-horizontal" action="/login/" method="post">
<div class="form-group">
<label for="inputEmail3" class="col-sm-3 control-label">Email</label>
<div class="col-sm-9">
<input type="email" name="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-3 control-label">Password</label>
<div class="col-sm-9">
<input type="password" name="pwd" class="form-control" id="inputPassword3" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-primary btn-block">Sign in</button>
</div>
</div>
</form>
<p class="text-danger text-center"> {{ error }} </p>
</div>
</div>
</div>
<script src="/static/jquery-3.2.1.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script>
</body>
</html>
# 登录用的函数
def login(request):
error_msg = ""
if request.method == "POST":
email = request.POST.get("email", None)
pwd = request.POST.get("pwd", None)
# print(email, pwd)
if email == "banshaohuan@163.com" and pwd == "banshaohuan":
return redirect("https://www.cnblogs.com/banshaohuan/")
else:
error_msg = "邮箱或密码错误"
return render(request, "login.html", {"error":error_msg})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
</head>
<body>
<a href="/add_user/">添加用户</a>
<table class="table-bordered">
<thead>
<tr>
<th>用户ID</th>
<th>用户名</th>
</tr>
</thead>
{% for user in user_list %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
</tr>
{% endfor %}
</table>
<script src="/static/jquery-3.2.1.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script>
</body>
</html>
# 展示所有用户信息列表的函数
def user_list(request):
# 利用ORM去查询数据库,得到数据
ret = models.UserInfo.objects.all()
return render(request, ‘user_list.html‘, {‘user_list‘:ret})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
</head>
<body>
<form action="/add_user/" method="post">
<p>用户名:</p>
<input type="text" name="username">
<p>提交</p>
<input type="submit">
</form>
<script src="/static/jquery-3.2.1.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script>
</body>
</html>
# 添加用户的函数
def add_user(request):
if request.method == ‘POST‘:
ret = request.POST.get(‘username‘)
models.UserInfo.objects.create(name=ret)
return redirect(‘/user_list/‘)
return render(request, ‘add_user.html‘)
return HttpResponse(request, ‘内容‘)
return render(request, "HTML文件", {替换内容})
return redirect(链接)
原文:https://www.cnblogs.com/banshaohuan/p/9253411.html