常见python web开发框架:
web.py
Django
Pylons
Tornado
Bottle
django菜鸟教程
一、django项目创建与启动
1.安装django pip install django==1.10.1
pip list查看是否安装成功
2.新建django项目
进入某个文件夹,CMD命令:django-admin startproject pythonDemo2
测试:在该文件夹下生成一个pythonDemo2的文件夹
3.运行项目
命令行方式:
在django项目目录(有manage.py文件的那个目录),命令 python manage.py runserver 0.0.0.0:8000
按钮方式(debug模式)
1.edit configuration,点击+号,选择python
2.script path选择manage.py文件,parameters填写 runserver,点击apply,ok
3.debug按钮运行项目
测试:浏览器http://127.0.0.1:8000/ 访问项目
http://127.0.0.1:8000/admin 访问管理工具
账号密码用命令创建 python manage.py createsuperuser
root root
4.创建应用(一个项目包含多个应用,可以理解为模块功能)
还是在有manage.py文件的那个目录 python manage.py startapp dy
测试:多个dy的文件夹
二、接口创建返回内容
返回json数据
1.路由文件定义请求路径 urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', HomePage.get_html),
path('user/find', User.find),
path('user/add', User.add),
re_path(r'^user/deleteById/(.+)$', User.delete),
path('user/update', User.update),
]
2.dy应用文件夹找到User.py,添加如下函数
from django.core import serializers
from django.http import HttpResponse
from dy.models import *
def find(request):
method = request.method
if method == 'GET':
user__model_list = UserModel.objects.all()
json_data = serializers.serialize('json', user__model_list)
return HttpResponse(json_data, content_type="application/json")
def add(request):
method = request.method
if method == "POST":
# 获取数据
json_str = request.body
json_dict = json.loads(json_str)
title = json_dict.get("title")
content = json_dict.get("content")
# 封装成model
user_model = UserModel(title=title, content=content)
# 保存
user_model.save()
# 返回
json_data = user_model.to_json()
return HttpResponse(json_data, content_type="application/json")
def delete(request, user_id):
method = request.method
if method == "DELETE":
user = UserModel.objects.get(id=user_id)
result = user.delete()
return HttpResponse(result, content_type="application/json")
def update(request):
method = request.method
if method == "POST":
# 获取数据
json_str = request.body
json_dict = json.loads(json_str)
id = json_dict.get("id")
title = json_dict.get("title")
content = json_dict.get("content")
# 更新
user_model = UserModel.objects.filter(id=id)
update_count = UserModel.objects.filter(id=id).update(title=title, content=content)
return HttpResponse(update_count, content_type="application/json")
UserModel单个对象转成json数据:
1.models.py文件里面Claass UserModel添加to_json方法
import json
def to_json(self):
return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))
2.业务层 UserModel调用to_json()方法
user_model = UserModel(title='职位1', content='内容1')
user_model.save()
json_data = user_model.to_json()
return HttpResponse(json_data, content_type="application/json")
UserModel集合转成json数据:
from django.core import serializers
def find(request):
user__model_list = UserModel.objects.all()
json_data = serializers.serialize('json', user__model_list)
return HttpResponse(json_data, content_type="application/json")
返回html文件
1.路由文件定义请求路径 urls.py
from django.contrib import admin
from django.urls import path
from dy import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.get_html),
path('getUser', views.get_user)
]
2.dy应用文件夹找到views.py,添加如下函数
from django.http import HttpResponse
from django.shortcuts import render
import json
def get_html(request):
return render(request,'test.html')
3.在templates目录创建test.html页面
要先创建html文件的目录templates并配置这个目录
步骤1创建目录:应用dy目录下添加包templates
步骤2配置目录:项目配置文件settings.py添加应用名称和模板
INSTALLED_APPS = [,
'dy'
]
TEMPLATES = [
{
'DIRS': ['templates'],
},
]
三、路由 分发/参数传递/POST
1.路由分发,每个app有自己的路由文件
见菜鸟教程
2.参数传递
from django.urls import path
from django.urls import re_path
from dy.function import User
urlpatterns = [
re_path(r'^user/deleteById/(.+)$', User.delete), #路径里面传递参数 user/deleteById/14
path('user/find', User.find), #问号后面的参数和body里面的参数在这边都没体现
]
获取参数
1.路径里面的参数
def delete(request, param1): #路径里面的参数值获取
user = UserModel.objects.get(id=param1)
result = user.delete()
return HttpResponse(result, content_type="application/json")
2.问号后面的参数
def find(request): #问号后面的参数值获取
title = request.GET.get('title') #不管是get还是post,问号后面的参数值都这样获取
content = request.GET.get('content')
user__model_list = UserModel.objects.all()
json_data = serializers.serialize('json', user__model_list)
return HttpResponse(json_data, content_type="application/json")
3.body里面的数据
def add(request):
# 获取数据
json_str = request.body
json_dict = json.loads(json_str)
title = json_dict.get("title")
content = json_dict.get("content")
# 封装成model
user_model = UserModel(title=title, content=content)
3. post delete方法
1.默认只支持get,如果要支持POST DELETE等其他,settings文件里面MIDDLEWARE注释掉CsrfViewMiddleware
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
2.url知道的函数里面根据request.method判断做处理
def find(request):
method = request.method
if method == 'GET':
user__model_list = UserModel.objects.all()
json_data = serializers.serialize('json', user__model_list)
return HttpResponse(json_data, content_type="application/json")
else:
return HttpResponse(method, content_type="application/json")
四、mysql数据库操作
1.配置数据库信息
项目文件夹pythonDemo2下settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 引擎用mysql
'NAME': 'conventional-station', # 数据库里面的一个库
'HOST': '10.10.4.129',
'PORT': '3306'
'USER': 'root',
'PASSWORD': '6287@fjyf.com'
}
}
如果改了数据库引擎启动报错提示:ModuleNotFoundError: No module named 'MySQLdb'
a.安装mysql驱动模块:pip install PyMySQL
b.项目文件夹pythonDemo2下的__init__.py文件添加如下内容
import pymysql
pymysql.install_as_MySQLdb()
2.声明表的字段信息
应用文件夹dy下models.py文件
class UserModel(models.Model): # 创建数据库和对数据的增删改查操作,创建出来的表名是 应用名_类名:dy_user
# 声明表的字段
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=100, null=False)
content = models.TextField(null=False)
link = models.CharField
class DeptModel(models.Model): # 创建数据库和对数据的增删改查操作,创建出来的表名是 应用名_类名:dy_user
# 声明表的字段
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=100, null=False)
content = models.TextField(null=False)
link = models.CharField(null=True, max_length=100)
测试:在dy目录下生成文件夹migrations文件夹
3.创建映射文件 python manage.py makemigrations dy
python manage.py makemigrations dy #dy为应用名称,需要在settings.py文件定义过
测试:刷新,在dy目录下就会出现migrations文件夹
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'dy'
]
4.创建表 python manage.py migrate
python manage.py migrate
测试:数据库中创建了多个表和自己定义的user表和dept表
5.表数据操作
from django.core import serializers
from django.http import HttpResponse
from dy.models import *
def find(request):
user__model_list = UserModel.objects.all()
json_data = serializers.serialize('json', user__model_list)
return HttpResponse(json_data, content_type="application/json")
def add(request):
user_model = UserModel(title='职位1', content='内容1')
user_model.save()
json_data = user_model.to_json()
return HttpResponse(json_data, content_type="application/json")
def delete(request):
# 删除id=1的数据
user = UserModel.objects.get(id=12)
result = user.delete()
return HttpResponse(result, content_type="application/json")
def update(request):
update_count = UserModel.objects.filter(id=12).update(title='职位12')
return HttpResponse(update_count, content_type="application/json")