yelmos

test

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比较难弄懂,不过功能已经实现了直接用就可以了

posted on 2021-07-26 11:18  yelmos  阅读(69)  评论(0编辑  收藏  举报

导航