Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие
Управляемое чтение
Сегодня я собираюсь подготовиться к проекту летних каникул. Недавно я делал резюме по python, поэтому наш проект начнется с python. Студенты, которым нравится java, не должны отчаиваться. Я напишу java-проект соответственно. Одна волна, следуйте вместе во время летних каникул, или вы можете сначала собрать волну и использовать ее для тренировки рук, когда у вас есть время.Хорошо, давайте перейдем к делу и прокричим лозунг "==Не толстейте, набирайтесь знаний=="
Акцент: Если вы не понимаете или у вас возникли проблемы с содержанием статьи, вы можете оставить сообщение. Кроме того, я хотел бы сказать, что это только основное введение. Я предлагаю вам все же просмотреть размещенные ресурсы. в конце моей статьи, чтобы узнать больше об этом.
Зачем использовать колбу

FLaskСам фреймворк реализует только самые основные функции, поэтомуFLaskназываетсяmicroFramework(微框架), с точки зрения количества кода, это действительно так. Но с инженерной точки зрения этот так называемый «маленький» приносит больше удобства. В крупных проектахflaskСравниватьdjangoСлишком удобно. Большой означает, что вы хотите настроитьadminСистема (например, иерархия администраторов, каждый администратор может настроить группу управления), сложные операции с базами данных, многие, многие операции с формами и проверками между сущностями и т. д.
Богатые ресурсы сторонних библиотек заставят вас чувствовать себя как рыба в воде при написании практически любого типа программы. для работы с базой данныхFLask-SQLAlchemy, чтобы проверить форму с помощьюFlask-WTF, для управления входом в системуFLask-Login, для почтыFlask-Mail...Итак, Flask и родственные фреймворкиDjangoПо сравнению с ним очевидно другое преимущество: гибкость. Вы можете выбрать любое стороннее расширение, которое вам нравится
установить колбу
pip install flask
Но установка таким способом немного медленная, поэтому рекомендуется переключиться на зеркала Tsinghuayuan или Doubanyuan.
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
Еще один момент, который следует упомянуть, это то, что нам лучше создавать проект при написании проекта == Использовать виртуальную среду == Это может предотвратить некоторые конфликты пакетов Python.Кроме того, для студентов, которые не знают, как создавать виртуальную среду, Я порекомендую книгу ниже.Книга содержит подробные учебные пособия.
начать колбу
from flask import Flask
app=Flask(__name__)#创建一个实例这样 下面有专门讲这个的
@app.route('/') #.route的作用时从实例这里创建路由告诉 Flask 什么样的URL 能触发我们的函数
def hello(): #简单的创建一个函数
return '你好'
if __name__=='__main__':
app.run(debug=True)# .run是flask开始运行的语句,里面也有很多参数一般建议使用debug=True,自带的调试总比你自己要好一点
app.run(host='192.168.1.2',port=3308)# 可加可不加这是对具体host和端口的设置,取决你的默认端口是否被占用
Подробнее см. в работе отладчика:портал
Полезность имени во фляге
Из приведенной выше программы мы видим, чтоflaskEстьnameЭто настроено специально для шаблона запуска.Если вы используете один модуль (как в примере выше), вы должны использоватьname, так как имя модуля будет различаться в зависимости от того, был ли он запущен как отдельное приложение или импортирован как модуль (например, 'main' или фактическое имя импорта). Это нужно для того, чтобы Flask знал, где искать шаблоны, статические файлы и т.д., плюс:
static_folder:静态地址,默认为static文件夹
static_url_path:静态网页地址
template_folder:模板文件夹,默认为templates文件夹
Ничего страшного, если вы немного не поймете здесь, книга даст вам подробное объяснение, чтобы вы могли разработать проект самостоятельно. Вы также можете сначала ознакомиться с официальной документацией.портал
Преобразователи и переменные правила
Чтобы добавить переменные части в URL-адреса, вы можете пометить эти специальные поля как <converter:variable_name>Укажите необязательный конвертер. Преобразователь в основном использует значение после страницы как некий стандарт для получения другой страницы. Для этого используется зашифрованная строка, которую мы часто видим.
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')#定义转换器
def show_user_profile(username):#将转换器传入函数中
# show the user profile for that user
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
if __name__ == '__main__':
app.run()
Flask的默认转换器:DEFAULT_CONVERTERS = {
‘default’: UnicodeConverter,
‘string’: UnicodeConverter,
‘any’: AnyConverter,
‘path’: PathConverter,
‘int’: IntegerConverter,
‘float’: FloatConverter,
‘uuid’: UUIDConverter,}
Ниже показано, как определить собственный преобразователь
class rc(BaseConverter):
# 重写父类的属性,定义转换器规则
def __init__(self,url_map):
super(rc,self).__init__(url_map)
#验证QQ邮箱的正则表达式
self.regex ='[0-9a-zA-Z_]{0,19}@qq.com'
#定义视图函数下的返回值
def to_python(self,value):
val=value
return val
def to_url(self,value):#返回url
return value
app.url_map.converters['em'] = rc #将自定义的转换器添加到转换器列表中
@app.route('/emm/<em:email>') #加入新的转换器
def email(email):
return 'email is:%s' % email #返回email
перенаправить
Перенаправление также очень важно в веб-разработке.Он может переходить с одной веб-страницы на другую веб-страницу, что эквивалентно операции после обновления.Для flask это в основном включает два модуля (redirect, url_for) Сначала создайте маршрут, чтобы использовать его в качестве примера позже
@app.route('/1')
def fg():
return '1122'
from flask import redirect,url_for
@app.route('/refer')
def refer():
return redirect('/1')#创建的另外一个路由
Это позволяет перейти непосредственно к функции в маршруте ('/1') и отобразить возвращаемое значение. Мы можем сначала получить доступ к функции маршрутизации, а затем перейти к соответствующей странице контента.Этот метод называетсянепрямой прыжок
@app.route('/ref')
def ref():
return redirect(url_for('fg')) #跳转这样直接访问ref子页面就可以直接跳转到相应页面了
установить страницу ошибки
Всем известно, что загрузки веб-страницы избежать невозможно.404ждать какой-то неправильно,flaskЕсть два способа: один — использовать прерывание системы для прямого назначения, а другой — использовать пользовательскийerrorhandlerфункция
- использовать
abort()ты можешь использовать этоredirect()Функция перенаправляет пользователя в другое место. Прервите запрос и верните код ошибки, используйтеabort()функция. Вот пример их использования:
from flask import abort, redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
abort(401)#401 意味着禁止访问
this_is_never_executed()
- По умолчанию коды ошибок отображают черно-белую страницу ошибки. Если вы хотите настроить страницу ошибки, вы можете использовать декоратор errorhandler():
from flask import render_template
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
Обратите внимание на ошибку 404 после вызова render_template(). Это сообщает Flask, что код ошибки для страницы — 404, который не найден. По умолчанию 200, значит все работает нормально.
чтение данных json
Как общий формат передачи данных, json имеет относительно высокую практичность.Как веб-фреймворк, flask также имеет определенные возможности обработки.В настоящее время он используетjsonify
@app.route('/json1')
def json1():
data={'name':'HW','first':'ZJ'}
return jsonify(data)
@app.route('/json2')
def json2():
return jsonify(hour=12,second=21)
куки и сеансы
В сеансе сохраняется содержимое сеанса, которое существует в файле cookie, с помощью которого мы можем напрямую войти в некоторые системы, которые уже вошли в систему. Для работы с сессией нам нужно ввести специально подготовленный для нее сессионный модуль, а также нужно настроить ключ безопасности для использования сессии Сначала поговорим о работе файлов cookie.
cookie的设置
set_cookie(key, value='', max_age=None, expires=None,path='/', domain=None, secure=False, httponly=False,samesite=None)
key:键
value:值
max_age:设置过期时间(秒)
expires:设置过期时间,时间戳的形式(1970离现在的时间)
path:当前主域名
domain:子域名
#设置cookie和headers
@app.route('/set_cookie')
def set_cookie():
response=make_response('cookie设置成功')
#cookie有效时长30天也可以是hour second minute
time=datetime.datetime.today()+datetime.timedelta(days=30)#设置cookie的有效时长
response.set_cookie('user','admin',expires=time) #设置用户名的cookie
response.set_cookie('pass','123456',expires=time) #设置密码的cookie
response.headers['X-Something']='mything' #这里不允许出现中文
response.headers['Server']='feixue' #服务器名称
return response
Получение и удаление файлов cookie
Чтобы получить cookie, вам нужно добавитьrequestМодули не являются поисковыми роботамиrequestsой
@app.route('/get_cookie')
def get_cookie():
name="用户名:"+request.cookies.get('user')+"密码:"+request.cookies.get('pass')
return name
Есть два способа удалить куки
1. Установив срок действия файла cookie равным 0, его можно удалить.
@app.route('/del_cookie1')
def del_cookie1():
response=make_response('delete cookie 1')
response.set_cookie('user','',expires=0)
response.set_cookie('pass','',expires=0)
return response
2. Напрямую удалить файлы cookie
@app.route('/del_cookie2')
def del_cookie2():
response=make_response('delete cookie 2')
response.delete_cookie('user')
response.delete_cookie('pass')
return response
Примечание при использовании сеансов на основе файлов cookie: Flask сериализует значения, которые вы помещаете в объект сеанса, в файлы cookie. Если вы обнаружите, что некоторые значения не сохраняются между запросами, однако файлы cookie действительно включены, вы также не получите четкого сообщения об ошибке. В этом случае проверьте размер файлов cookie в ответе на странице и сравните с размером, поддерживаемым вашим веб-браузером.
сеансовая операция
установить сеанс Настроить ключи безопасности Проблема со случайностью заключается в том, что трудно сказать, что действительно случайно. Ключ должен быть достаточно случайным. Ваша операционная система может генерировать приятные случайные значения на основе ключевого генератора случайных чисел, которые можно использовать в качестве ключей:
app.config['SECRET_KEY']=os.urandom(30)
Установить словарь сеанса
session['user']='fei'
session['pass']='xue'
Установите метод истечения сеанса
session.parmanent=True #默认31天后过期
#session两个小时过期
app.config['PERMANENT_SESSION_LIFETIME']= timedelta(hour=2)
вместе это
@app.route('/session1')
def session1():
session['user']='fei'
session['pass']='xue'
session.parmanent=True #默认31天后过期
return 'login success'
получить сеанс получение() и получение индекса, получение индекса нестабильно или рекомендуется использовать метод get
@app.route('/session')
def session2():
us=session.get("user")
pa=session.get("pass")
return 'hello %s %s'%(us,pa)
удалить сеанс удалять по одному
@app.route('/session')
def session3():
session.pop('user',None)
session.pop('pass',None)
return 'delete successful!'
удалить все
@app.route('/session4')
def session4():
session.clear()
return 'delete successful!'
использование запроса
получить это вышеcookieупомянулrequest, давайте поговорим об использовании запроса, который представляет собой модуль, специально используемый для управления запросами веб-страницы.requestизgetпросить
可通过设置它的methods参数来指定请求方式。
@app.route('/get', methods = ['GET','POST'])
def get():
if request.method == 'GET':
return '这是一个GET请求'
else:
return '这是一个其它请求'
отправить запрос
@app.route('/post', methods = ['POST','GET'])
def post():
if request.method == 'POST':
return '这是一个POST请求'
else:
return '这是一个其它请求'
аргументы запроса
记录get请求中的查询参数,一般用于查询,搜索网址
https://www.kugou.com/yy/html/search.html#searchType=song&searchKeyWord=你的名字
它会返回get请求中的参数,比如请求上面的url,它的请求参数便是:
searchType=song&searchKeyWord=你的名字
使用方法:
request.args['keyword']
request.args.get('keyword')
requestизformЗапишите данные формы в запросе, обычно используемом для отправки формы. Например, когда мы регистрируем веб-сайт, нам часто нужно отправить форму.
我们可以使用获取表单中的内容:
request.form['keyword']
request.form.get('keyword')
requestизheaders
返回请求网页头部信息,返回一个列表。
request.headers['keyword']
request.headers.get('keyword')
Необходим для разработки чертежей
Это знание будет Файл хранения следующей программы называется fei.py.
from flask import Flask
app=Flask(__name__)
@app.route('/kj')
def df():
return 'hello world'
@app.route('/index')
def lk():
return 'efhsfj'
Так что есть
from flask import Flask,request
from fei import *
@app.route('/')
def login():
return request.url
if __name__ == '__main__':
app.run(debug=True)
Видно, что суть вызова блупринта функции в этом файле из основного файла не что иное, как введение нескольких модулей в основной модуль для использования, что эквивалентно написанию модуля самим и трактовке его как блупринта для вызова. Если в нескольких схемах используются одни и те же методы, можно использовать функцию просмотра схемы, чтобы различать соответствующие методы.
Посмотреть
Представления понятны всем, представления имеют схожие значения, например, представления в базе данных mysql на самом деле интероперабельны, и большой разницы не будет, но функции разные. Способ создания представлений также очень прост, все они наследуются от класса представлений фляги. вид класса
from flask.views import View
def ff():
return 'ok'
class st(View):
def dispatch_request(self): #必须实现这个方法
return "任性的90后boy"
# 类视图通过add_url_rule方法和url做映射
app.add_url_rule(rule='/ff',view_func=st.as_view('tt'))
метод
from flask.views import MethodView
def gg():
return 'ok'
class login(MethodView):
#当客户端通过get方法进行访问的时候执行的函数
def get(self):
return 'get'
# 当客户端通过post方法进行访问的时候执行的函数
def post(self):
email = request.form.get("user")
password = request.form.get("pass")
if user== 'gffsadff' and pass== '4fsaferwf':
return "登录成功"
else:
return "登陆失败"
# 通过add_url_rule添加类视图和url的映射,并且在as_view方法中指定该url的名称,方便url_for函数调用
app.add_url_rule('/gg',view_func=login.as_view('lg'))
Обмен ресурсами
как и в прошлый разMySQL篇Таким же образом, чтобы каждый мог учиться лучше, мы также нашли некоторые ресурсы для всех.flask web开发基于pythonЕсли вы хотите узнать об этом, вы можете перейти на мою домашнюю страницу, чтобы найти ресурсы.Конечно, вы также можете написать мне лично. Напоследок хочу поделиться с вами картинкой, которая мне особенно понравилась в последнее время, можете поддержать три раза подряд.