djaong flask文档总结
最近使用的是flask框架比较多,属于灵活的框架
一,flask
APScheduler这个插件在项目中使用较多,就想熟悉一下
from flask import Flask
from flask_apscheduler import APScheduler # 引入APScheduler
#任务配置类
class SchedulerConfig(object):
JOBS = [
{
'id': 'print_job', # 任务id
'func': '__main__:print_job', # 任务执行程序
'args': None, # 执行程序参数
'trigger': 'interval', # 任务执行类型,定时器
'seconds': 5, # 任务执行时间,单位秒
}
]
#定义任务执行程序
def print_job():
print("I'm a scheduler!")
app = Flask(__name__)
#为实例化的flask引入定时任务配置
app.config.from_object(SchedulerConfig())
if __name__ == '__main__':
scheduler = APScheduler() # 实例化APScheduler
scheduler.init_app(app) # 把任务列表载入实例flask
scheduler.start() # 启动任务计划
app.run(host="0.0.0.0", port=8888)
二 flask 连接数据库
本人项目是直接连接mongodb的,没有像连接mysql数据库这么麻烦
flask 连接mysql
导入第三方连接库sql点金术
from flask_sqlalchemy import SQLAlchemy
建立对象
app = Flask(name)
载入配置文件
app.config.from_pyfile('config.ini')
#指定数据库连接还有库名
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@127.0.0.1:3306/myflask?charset=utf8'
指定配置,用来省略提交操作
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
建立数据库对象
db = SQLAlchemy(app)
建立数据库类,用来映射数据库表,将数据库的模型作为参数传入
class User(db.Model):
#声明表名
__tablename__ = 'user'
#建立字段函数
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(200))
password = db.Column(db.String(200))
数据库的查询操作(查)
@app.route("/select")
def select_user():
#简单的全量查询
# 翻译为 select * from user
ulist = User.query.all()
print(ulist)
for item in ulist:
print(item.name)
#只取一条
# 翻译为 select * from user limit 1
ulist = User.query.first()
print(ulist)
#使用原生的sql语句
# 翻译为 select * from user order by id desc limit 1,2
items = db.session.execute(' select * from user order by id desc ')
#将结果集强转为list
items = list(items)
#使用原生语句进行修改操作
#db.session.execute(" update user set password = '321321' where id = 6 ")
#将动态数据传递给模板
return render_template('day5.html',items=items)
数据库的修改操作(改)
@app.route("/edit")
def edit_user():
#根据某个字段做修改操作
#翻译为 update user set name = '张三' where id = 2
User.query.filter_by(id=3).update({'name':'张三'})
return '这里是修改操作'
数据库的删除操作(删)
@app.route("/del")
def del_user():
#根据某个字段做删除,filter_by可以理解为where条件限定
# 翻译为 delete from user where id = 1
User.query.filter_by(id=1).delete()
return '这里是删除操作'
数据库的入库操作(增)
@app.route("/")
def index():
#增,入库逻辑
#声明对象
user = User(name='你好你好',password='456456')
#调用添加方法
db.session.add(user)
#提交入库
#db.session.commit()
return '这里是首页'
flask 连接mongo只需要下载pymogo直接连接就可以了
flask jwt熟悉
用于用户登录验证,可以下载插件jwt,也可以下载flask内部的插件flask-jwt进行使用,属于简易的一个功能
flask config.ini配置
一般服务需要配置文件,测试是启动的配置文件和上线时启动的文件
单独的配置文件
程序逐渐变大时,配置也逐渐增多,写在主脚本里太占地方,不够优雅(这时你应该已经把表单,路由,数据库模型等等分成独立的文件了。关于大型项目结构,后续会总结)。我们可以创建一个单独的配置文件。和上面同样的配置,现在可以改写为:
config.py
SECRET_KEY = 'some secret words'
DEBUG = True
ITEMS_PER_PAGE = 10
在创建程序实例后导入配置:
import config
...
app = Flask(name)
app.config.from_object(config)
...
flask 的思维导图
flask 上下文
Flask 创建应用上下文
2021-06-28 15:36 更新
有两种方式来创建应用上下文。第一种是隐式的:无论何时当一个请求上下文被压栈时, 如果有必要的话一个应用上下文会被一起创建。由于这个原因,你可以忽略应用 上下文的存在,除非你需要它。
第二种是显式地调用 app_context() 方法:
from flask import Flask, current_app
app = Flask(name)
with app.app_context():
# within this block, current_app points to app.
print current_app.name
在配置了 SERVER_NAME 时,应用上下文也被用于 url_for() 函 数。这允许你在没有请求时生成 URL
二django学习
django 现在主要使用的是restframework这个插件,我面试问的也非常多,可以熟悉熟悉
Install using pip, including any optional packages you want...
pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
...or clone the project from github.
git clone git@github.com:encode/django-rest-framework.git
Add 'rest_framework' to your INSTALLED_APPS setting.(记得在setting文件里面添加rest_framework,当然,你还得先安装djangorestframework)
INSTALLED_APPS = (
...
'rest_framework',
)
If you're intending to use the browsable API you'll probably also want to add REST framework's login and logout views. Add the following to your root urls.py file.
如果您打算使用可浏览的API,您可能还需要添加REST框架的登录和注销视图。将以下内容添加到您的根urls.py文件中。
urlpatterns = [
...
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
Note that the URL path can be whatever you want, but you must include 'rest_framework.urls' with the 'rest_framework' namespace. You may leave out the namespace in Django 1.9+, and REST framework will set it for you.
请注意,URL路径可以是任何你想要的,但你必须包括'rest_framework.urls'与'rest_framework'命名空间。您可以在Django 1.9+中省略命名空间,REST框架将为您设置。
Quickstart
Can't wait to get started? The quickstart guide is the fastest way to get up and running, and building APIs with REST framework.
说了一堆,直接来个demo,快速上手,看看效果。官网请看:http://www.django-rest-framework.org/tutorial/quickstart/
首先肯定得先创建django程序啦,接着创建APP,这里我创建了一个quickstart的app。
Now sync your database for the first time:同步数据库
python manage.py migrate
创建超级用户用于登陆。We'll also create an initial user named admin with a password of password123. We'll authenticate as that user later in our example.
python manage.py createsuperuser
Serializers
首先我们要定义一些序列化程序。在quickstart这个APP下创建serializers文件,用于展示数据。
First up we're going to define some serializers. Let's create a new module named tutorial/quickstart/serializers.py that we'll use for our data representations.
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')
Notice that we're using hyperlinked relations in this case, with HyperlinkedModelSerializer. You can also use primary key and various other relationships, but hyperlinking is good RESTful design.
请注意,在这种情况下,我们正在使用超链接关系HyperlinkedModelSerializer。您还可以使用主键和各种其他关系,但超链接是好的RESTful设计。
Views
Right, we'd better write some views then. Open tutorial/quickstart/views.py and get typing. 写一些视图,查询数据。
class Article(models.Model):
"""文章资讯"""
title = models.CharField(max_length=255, unique=True, db_index=True, verbose_name="标题")
source = models.ForeignKey("ArticleSource", verbose_name="来源")
article_type_choices = ((0, '资讯'), (1, '视频'))
article_type = models.SmallIntegerField(choices=article_type_choices, default=0)
brief = models.TextField(max_length=512, verbose_name="摘要")
head_img = models.CharField(max_length=255)
content = models.TextField(verbose_name="文章正文")
pub_date = models.DateTimeField(verbose_name="上架日期")
offline_date = models.DateTimeField(verbose_name="下架日期")
status_choices = ((0, '在线'), (1, '下线'))
status = models.SmallIntegerField(choices=status_choices, default=0, verbose_name="状态")
order = models.SmallIntegerField(default=0, verbose_name="权重", help_text="文章想置顶,可以把数字调大")
comment_num = models.SmallIntegerField(default=0, verbose_name="评论数")
agree_num = models.SmallIntegerField(default=0, verbose_name="点赞数")
view_num = models.SmallIntegerField(default=0, verbose_name="观看数")
collect_num = models.SmallIntegerField(default=0, verbose_name="收藏数")
tags = models.ManyToManyField("Tags", blank=True, verbose_name="标签")
date = models.DateTimeField(auto_now_add=True, verbose_name="创建日期")
def __str__(self):
return "%s-%s" % (self.source, self.title)
接下来,只需要写一个序列化器,便可以轻松对数据的进行获取,而且代码看起来特别简洁。
在 serilallzer.py 文件可以这样写
如果想使用哪个model进行序列化,照此类推即可
fields 如果想要获取所有字段, 使用"all"
fields 如果只是想要获取一部分数据呢, 那么在 fields 中加入所序列化的model的字段即可
from rest_framework.serializers import ModelSerializer
class ArticleSerializer(ModelSerializer):
class Meta:
model = models.Article
fields = ("id", "title", "article_type", "content", ) or "all"
这个restframe比较难弄懂,不过功能已经实现了直接用就可以了