实例介绍
【实例简介】
【实例截图】
【核心代码】
CONTENTS I User’s Guide 1 1 Foreword 3 1.1 What does “micro” mean? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Configuration and Conventions . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Growing with Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Foreword for Experienced Programmers 5 2.1 Thread-Locals in Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Develop for the Web with Caution . . . . . . . . . . . . . . . . . . . . . . 5 2.3 The Status of Python 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3 Installation 7 3.1 virtualenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2 System-Wide Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3 Living on the Edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.4 pip and distribute on Windows . . . . . . . . . . . . . . . . . . . . . . . . 9 4 Quickstart 11 4.1 A Minimal Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.3 Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.4 Static Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.5 Rendering Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.6 Accessing Request Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.7 Redirects and Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.8 About Responses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.9 Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.10 Message Flashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.11 Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.12 Hooking in WSGI Middlewares . . . . . . . . . . . . . . . . . . . . . . . 25 4.13 Deploying to a Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5 Tutorial 27 5.1 Introducing Flaskr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2 Step 0: Creating The Folders . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.3 Step 1: Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 i 5.4 Step 2: Application Setup Code . . . . . . . . . . . . . . . . . . . . . . . . 29 5.5 Step 3: Creating The Database . . . . . . . . . . . . . . . . . . . . . . . . 31 5.6 Step 4: Request Database Connections . . . . . . . . . . . . . . . . . . . . 32 5.7 Step 5: The View Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.8 Step 6: The Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.9 Step 7: Adding Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.10 Bonus: Testing the Application . . . . . . . . . . . . . . . . . . . . . . . . 37 6 Templates 39 6.1 Jinja Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.2 Standard Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.3 Standard Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.4 Controlling Autoescaping . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.5 Registering Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.6 Context Processors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 7 Testing Flask Applications 43 7.1 The Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.2 The Testing Skeleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.3 The First Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 7.4 Logging In and Out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 7.5 Test Adding Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.6 Other Testing Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.7 Faking Resources and Context . . . . . . . . . . . . . . . . . . . . . . . . 47 7.8 Keeping the Context Around . . . . . . . . . . . . . . . . . . . . . . . . . 48 7.9 Accessing and Modifying Sessions . . . . . . . . . . . . . . . . . . . . . . 48 8 Logging Application Errors 51 8.1 Error Mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 8.2 Logging to a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 8.3 Controlling the Log Format . . . . . . . . . . . . . . . . . . . . . . . . . . 53 8.4 Other Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 9 Debugging Application Errors 57 9.1 When in Doubt, Run Manually . . . . . . . . . . . . . . . . . . . . . . . . 57 9.2 Working with Debuggers . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 10 Configuration Handling 59 10.1 Configuration Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 10.2 Builtin Configuration Values . . . . . . . . . . . . . . . . . . . . . . . . . 60 10.3 Configuring from Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 10.4 Configuration Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . 63 10.5 Development / Production . . . . . . . . . . . . . . . . . . . . . . . . . . 63 10.6 Instance Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 11 Signals 67 11.1 Subscribing to Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 11.2 Creating Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 11.3 Sending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ii 11.4 Signals and Flask’s Request Context . . . . . . . . . . . . . . . . . . . . . 70 11.5 Decorator Based Signal Subscriptions . . . . . . . . . . . . . . . . . . . . 70 11.6 Core Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 12 Pluggable Views 75 12.1 Basic Principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 12.2 Method Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 12.3 Method Based Dispatching . . . . . . . . . . . . . . . . . . . . . . . . . . 77 12.4 Decorating Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 12.5 Method Views for APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 13 The Application Context 81 13.1 Purpose of the Application Context . . . . . . . . . . . . . . . . . . . . . 81 13.2 Creating an Application Context . . . . . . . . . . . . . . . . . . . . . . . 82 13.3 Locality of the Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 13.4 Context Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 14 The Request Context 85 14.1 Diving into Context Locals . . . . . . . . . . . . . . . . . . . . . . . . . . 85 14.2 How the Context Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 14.3 Callbacks and Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 14.4 Teardown Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 14.5 Notes On Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 14.6 Context Preservation on Error . . . . . . . . . . . . . . . . . . . . . . . . 88 15 Modular Applications with Blueprints 91 15.1 Why Blueprints? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 15.2 The Concept of Blueprints . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 15.3 My First Blueprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 15.4 Registering Blueprints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 15.5 Blueprint Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 15.6 Building URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 16 Flask Extensions 97 16.1 Finding Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 16.2 Using Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 16.3 Flask Before 0.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 17 Working with the Shell 99 17.1 Creating a Request Context . . . . . . . . . . . . . . . . . . . . . . . . . . 99 17.2 Firing Before/After Request . . . . . . . . . . . . . . . . . . . . . . . . . 100 17.3 Further Improving the Shell Experience . . . . . . . . . . . . . . . . . . . 100 18 Patterns for Flask 101 18.1 Larger Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 18.2 Application Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 18.3 Application Dispatching . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 18.4 Implementing API Exceptions . . . . . . . . . . . . . . . . . . . . . . . . 108 18.5 Using URL Processors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 iii 18.6 Deploying with Distribute . . . . . . . . . . . . . . . . . . . . . . . . . . 112 18.7 Deploying with Fabric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 18.8 Using SQLite 3 with Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 18.9 SQLAlchemy in Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 18.10 Uploading Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 18.11 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 18.12 View Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 18.13 Form Validation with WTForms . . . . . . . . . . . . . . . . . . . . . . . 132 18.14 Template Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 18.15 Message Flashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 18.16 AJAX with jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 18.17 Custom Error Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 18.18 Lazily Loading Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 18.19 MongoKit in Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 18.20 Adding a favicon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 18.21 Streaming Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 18.22 Deferred Request Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . 150 18.23 Adding HTTP Method Overrides . . . . . . . . . . . . . . . . . . . . . . 151 18.24 Request Content Checksums . . . . . . . . . . . . . . . . . . . . . . . . . 152 18.25 Celery Based Background Tasks . . . . . . . . . . . . . . . . . . . . . . . 153 19 Deployment Options 155 19.1 mod_wsgi (Apache) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 19.2 Standalone WSGI Containers . . . . . . . . . . . . . . . . . . . . . . . . . 158 19.3 uWSGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 19.4 FastCGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 19.5 CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 20 Becoming Big 169 20.1 Read the Source. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 20.2 Hook. Extend. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 20.3 Subclass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 20.4 Wrap with middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 20.5 Fork. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 20.6 Scale like a pro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 20.7 Discuss with the community. . . . . . . . . . . . . . . . . . . . . . . . . . 171 II API Reference 173 21 API 175 21.1 Application Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 21.2 Blueprint Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 21.3 Incoming Request Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 21.4 Response Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 21.5 Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 21.6 Session Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 21.7 Test Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 21.8 Application Globals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 iv 21.9 Useful Functions and Classes . . . . . . . . . . . . . . . . . . . . . . . . . 207 21.10 Message Flashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 21.11 JSON Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 21.12 Template Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 21.13 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 21.14 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 21.15 Stream Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 21.16 Useful Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 21.17 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 21.18 Class-Based Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 21.19 URL Route Registrations . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 21.20 View Function Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 III Additional Notes 229 22 Design Decisions in Flask 231 22.1 The Explicit Application Object . . . . . . . . . . . . . . . . . . . . . . . . 231 22.2 The Routing System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 22.3 One Template Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 22.4 Micro with Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 22.5 Thread Locals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 22.6 What Flask is, What Flask is Not . . . . . . . . . . . . . . . . . . . . . . . 234 23 HTML/XHTML FAQ 235 23.1 History of XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 23.2 History of HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 23.3 HTML versus XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 23.4 What does “strict” mean? . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 23.5 New technologies in HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . 238 23.6 What should be used? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 24 Security Considerations 239 24.1 Cross-Site Scripting (XSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 24.2 Cross-Site Request Forgery (CSRF) . . . . . . . . . . . . . . . . . . . . . . 240 24.3 JSON Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 25 Unicode in Flask 243 25.1 Automatic Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 25.2 The Golden Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 25.3 Encoding and Decoding Yourself . . . . . . . . . . . . . . . . . . . . . . . 244 25.4 Configuring Editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 26 Flask Extension Development 247 26.1 Anatomy of an Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 26.2 “Hello Flaskext!” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 26.3 Initializing Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 26.4 The Extension Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 26.5 Using _app_ctx_stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 v 26.6 Teardown Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 26.7 Learn from Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 26.8 Approved Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 26.9 Extension Import Transition . . . . . . . . . . . . . . . . . . . . . . . . . 254 27 Pocoo Styleguide 255 27.1 General Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 27.2 Expressions and Statements . . . . . . . . . . . . . . . . . . . . . . . . . . 256 27.3 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 27.4 Docstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 27.5 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 28 Python 3 Support 259 28.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 28.2 API Stability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 28.3 Few Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 28.4 Small Ecosystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 28.5 Recommendations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 29 Upgrading to Newer Releases 261 29.1 Version 0.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 29.2 Version 0.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 29.3 Version 0.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 29.4 Version 0.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 29.5 Version 0.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 29.6 Version 0.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 29.7 Version 0.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 29.8 Version 0.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 30 Flask Changelog 269 30.1 Version 0.10.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 30.2 Version 0.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 30.3 Version 0.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 30.4 Version 0.8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 30.5 Version 0.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 30.6 Version 0.7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 30.7 Version 0.7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 30.8 Version 0.7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 30.9 Version 0.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 30.10 Version 0.6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 30.11 Version 0.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 30.12 Version 0.5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 30.13 Version 0.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 30.14 Version 0.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 30.15 Version 0.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 30.16 Version 0.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 30.17 Version 0.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 30.18 Version 0.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 30.19 Version 0.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 vi 31 License 281 31.1 Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 31.2 General License Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . 282 31.3 Flask License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 31.4 Flask Artwork License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Index 285
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论