Beginning Django (eBook)
XXVII, 593 Seiten
Apress (Verlag)
978-1-4842-2787-9 (ISBN)
- Get started with the Django framework
- Use Django views, class-based views, URLs, middleware, forms, templates, and Jinja templates
- Take advantage of Django models, including model relationships, migrations, queries, and forms
- Leverage the Django admin site to get access to the database used by a Django project
- Deploy Django REST services to serve as the data backbone for mobile, IoT, and SaaS systems
Daniel Rubio is an independent consultant with over 10 years of experience in enterprise and web-based software. More recently, Daniel is founder and technical lead at MashupSoft.com. He has co-authored the best selling Spring Recipes as well as other books for Apress Media, LLC. Daniel's expertise lies in Java, Spring, Python, Django, JavaScript/CSS and HTML.
Discover the Django web application framework and get started building Python-based web applications. This book takes you from the basics of Django all the way through to cutting-edge topics such as creating RESTful applications. Beginning Django also covers ancillary, but essential, development topics, including configuration settings, static resource management, logging, debugging, and email. Along with material on data access with SQL queries, you'll have all you need to get up and running with Django 1.11 LTS, which is compatible with Python 2 and Python 3.Once you've built your web application, you'll need to be the admin, so the next part of the book covers how to enforce permission management with users and groups. This technique allows you to restrict access to URLs and content, giving you total control of your data. In addition, you'll work with and customize the Django admin site, which provides access to a Django project'sdata.After reading and using this book, you'll be able to build a Django application top to bottom and be ready to move on to more advanced or complex Django application development.What You'll LearnGet started with the Django frameworkUse Django views, class-based views, URLs, middleware, forms, templates, and Jinja templatesTake advantage of Django models, including model relationships, migrations, queries, and formsLeverage the Django admin site to get access to the database used by a Django projectDeploy Django REST services to serve as the data backbone for mobile, IoT, and SaaS systemsWho This Book Is For Python developers new to the Django web application development framework and web developers new to Python and Django.
Daniel Rubio is a consultant with over 15 years of experience in enterprise and web-based software. Daniel works with companies to develop software solutions using Python, JavaScript and Cloud computing, as well as other innovative technologies like AI and Blockchain to deliver key business results. He has co-authored the best selling Spring Recipes as well as other books for Apress Media, LLC. Daniel can be reached at https://twitter.com/webforefront.
Contents at a Glance 5
Contents 6
About the Author 20
About the Technical Reviewer 21
Acknowledgments 22
Introduction 23
Chapter 1: Introduction to the Django Framework 24
Django Framework Design Principles 25
Don’t Repeat Yourself (DRY) Principle 25
Explicit Is Better Than Implicit 27
Loosely Coupled Architecture 28
Install Django 28
Install Python (Prerequisite) 29
Update or Install pip Package Manager (Prerequisite) 30
Install virtualenv (Optional Prerequisite) 31
Install Django 34
Install Django from Git 34
Start a Django Project 36
Set Up a Database for a Django Project 38
Install Python Database Packages 41
Test Django Database Connection and Build Django Base Tables 41
Set Up Content: Understand Urls, Templates, and Apps 42
Create and Configure Django Urls 43
Create and Configure Django Templates 44
Create and Configure Django Apps 45
Set Up the Django admin Site 48
Configure and Install the Django admin site App 48
Configure and Install the Django admin site docs App 51
Chapter 2: Django Urls and Views 53
Url Regular Expressions 53
Precedence Rule: Granular Urls First, Broad Urls Last 53
Exact Url Patterns: Forgoing Broad Matching 54
Common Url Patterns 55
Url Parameters, Extra Options, and Query Strings 57
Url Consolidation and Modularization 60
Url Naming and Namespaces 62
View Method Requests 69
View Method Responses 71
Response Options for HTTP Status and Content-Type Headers 72
Built-In Response Shortcuts and Templates for Common HTTP Status: 404 (Not Found), 500 (Internal Server Error), 400 (Bad Request), and 403 (Forbidden) 73
Built-In Response Shortcuts for Inline and Streamed Content 77
View Method Middleware 79
Built-In Middleware Classes 79
Middleware Structure and Execution Process 82
Middleware Flash Messages in View Methods 86
Add Flash Messages 87
Access Flash Messages 89
Class-Based Views 90
Built-In Class-Based Views 91
Class-Based View Structure and Execution 91
Chapter 3: Django Templates 95
Django Template Syntax 95
Auto-Escaping: HTML and Erring on the Safe Side 96
Django Template Configuration 97
Template Search Paths 98
Invalid Template Variables 100
Debug Output 102
Auto-Escape 103
File charset 104
Automatic Access to Custom Template tag/filter Modules 105
Template Loaders 106
Create Reusable Templates 107
Built-In Context Processors 109
Django debug context processor (django.template.context_processors.debug) 110
Django request context processor (django.template.context_processors.request) 110
Django auth context processor (django.contrib.auth.context_processors.auth) 110
Django messages context processor (django.contrib.messages.context_processors.messages) 111
Other Built-In Django Context Processors: i18n, media, static, tz, and CSRF context Processors 111
Django i18n context processor (django.template.context_processors.i18n) 111
Django media context processor (django.template.context_processors.media) 111
Django static context processor (django.template.context_processors.static) 111
Django tz context processor (django.template.context_processors.tz) 112
Django CSRF context Processor (django.template.context_processors.csrf) 112
Custom Context Processors 112
Built-In Django Filters 113
Dates 113
Strings, Lists, and Numbers 116
Numbers 117
Strings 118
Lists and Dictionaries 120
Spacing and Special Characters 121
Development and Testing 122
Urls 123
Built-In Django Tags 123
Dates 124
Forms 124
Comparison Operations 124
Loops 126
Python and Filter Operations 129
Spacing and Special Characters 130
Template Structures 131
Development and Testing 132
Urls 132
Custom Filters 132
Structure 132
Options: Naming, HTML, and What Comes In and Out 134
Installation and Access 136
Chapter 4: Jinja Templates in Django 138
Jinja Advantages and Disadvantages 138
Transition to Jinja Templates from Django Templates 139
What Works the Same Way in Jinja and Django Templates 139
Variables and blocks 140
Conditionals and loops 140
Comments 140
Spacing and special characters 140
What Works Differently in Jinja Templates Compared to Django Templates 140
Filters 140
Context processors 141
No date elements like the {% now %} tag and filters like time and timesince 141
{% comment %} tag not supported 141
{% load %} tag not supported 141
Use {{super()}} instead of {{block.super}} 141
{% csrf_token %} tag not supported, instead use csrf_input or csrf_token variables 141
{% for %} loop variables 141
{% empty %} tag not supported in loops, use the {% else %} tag 142
{% groupby %} tag not supported, use the groupby filter 142
{% cycle %} tag not supported, use the cycler function or the loop.cycle variable in {% for %} loops 142
{% lorem %} tag not supported, use the lipsum Function 142
Other miscellaneous tags like {% static %}, {% trans %}, {% blocktrans %}, and {% url %} not supported 142
New Concepts and Features in Jinja Templates vs. Django Templates 142
More useful built-in filters, tests, and more resemblance to a Python environment 142
Global functions 143
Flexible tag nesting, conditionals, and references 143
Macros 143
Flexible variable assignment in templates with less restrictive scope 143
Line statements 143
Jinja Template Configuration in Django 144
Template Search Paths 144
Auto-Escaping Behavior 146
Auto-Reload Template Behavior and Caching 147
Invalid Template Variables 148
Template Loaders 149
Create Reusable Jinja Templates 149
Jinja Globals: Access Data on All Jinja Templates, Like Django Context Processors 155
Jinja Built-In Statements/Tags and Functions (Like Django Template Tags) 156
Comparison Operations 157
Loops 158
Python and Filter Operations 162
Spacing and Special Characters 163
Template Structures 166
Jinja Built-In Filters and Tests (Like Django Filters) 167
Strings, Lists, Dictionaries, Numbers, and Objects 167
Strings and Lists 168
Dictionaries and Objects 170
Strings 172
Numbers 172
Spacing and Special Characters 173
Development and Testing 176
Urls 176
Custom Filters and Tests in Jinja 176
Structure 176
Installation and Access 177
Jinja Extensions 179
Enable Jinja Extensions 180
Create Jinja Extensions 180
Jinja Policies 182
Chapter 5: Django Application Management 183
Django settings.py for the Real World 183
Switch DEBUG to False 183
Define ALLOWED_HOSTS 184
Be Careful with the SECRET_KEY Value 185
Define Administrators for ADMINS and MANAGERS 185
Use Dynamic Absolute Paths 186
Use Multiple Environments or Configuration Files for Django 188
Option 1) Multiple environments in the same settings.py file with a control variable 188
Option 2) Multiple environment files using configparser 190
Option 3) Multiple settings.py files with different names for each environment 192
Set Up Static Web Page Resources - Images, CSS, JavaScript 193
Set Up Static Resources in a Development Environment (DEBUG=False) 193
Access Static Resources in Django Templates 196
Access Static Resources in Jinja Templates 198
Set Up Static Resources in a Production Environment (DEBUG=True) 198
Django Logging 199
Python Core Logging Concepts 200
Django Default Logging 200
Create Log Messages 203
Custom Logging 205
Disable default Django logging configuration 206
Logging formatters: Message output 207
Logging handlers: Locations, classes, filters, and logging thresholds 208
Logging loggers: Python packages to use logging 209
Disable email to ADMINS on errors 209
Logging with Sentry 210
Set up Sentry the application 210
Set up a Django application to use Sentry 212
Django Email Service 213
Set Up a Default Connection to an Email Server 213
Set Up a Default Connection to Third-Party Email Providers 214
Email with Google Gmail/Google Apps 215
Email with Amazon Simple Email Service (SES) 216
Email with SparkPost 216
Built-In Helpers to Send Email 217
Custom Email: Attachments, Headers, CC, BCC, and More with EmailMessage 219
Debug Django Applications 223
Django Shell: Python manage.py Shell 224
Django Debug Toolbar 224
Django pdb 226
Django Extensions 228
Django Management Commands 231
Custom Management Command Structure 232
Custom Management Command Installation 234
Management Command Automation 235
Chapter 6: Django Forms 237
Django Form Structure and Workflow 237
Functional Web Form Syntax for Django Forms 239
Django View Method to Process Form (POST Handling) 240
CSRF: What Is It and How Does It Work with Django? 242
Django Form Processing: Initialization, Field Access, Validation, and Error Handling 244
Initialize Forms: Initial for Fields and Forms, __init__ method, label_suffix, auto_id, field_order, and use_required_attribute 245
Accessing Form Values: request.POST and cleaned_data 249
Validating Form Values: is_valid(), validators, clean_< field>
Error Form Values: Errors 254
Django Form Field Types: Widgets, Options, and Validations 255
The Relationship between Widgets and Form Fields 265
Empty, Default, and Predetermined Values: Required, Initial, and Choices 266
Limiting Text Values: max_length, min_length, strip, and Validators 266
Limiting Number Values: max_value, min_value, max_digits, decimal_places, and Validators 267
Error Messages: error_messages 267
Field Layout Values: label, label_suffix, help_text 268
Set Up the Layout for Django Forms in Templates 268
Output Form Fields: form.as_table, form.as_p, form.as_ul, and Granularly by Field 269
Output Field Order: field_order and order_fields 272
Output CSS Classes, Styles, and Field Attributes: error_css_class, required_css_class, Widget, Customization, and Various Form Field Options 272
Output Form Field Errors: form.< field_name>
Django Custom Form Fields and Widgets 275
Create Custom Form Fields 276
Customize Built-In Widgets 277
Create Custom Form Widgets 278
Custom Form Widget Configuration Options 280
Django Advanced Form Processing: Partial Forms, AJAX, and Files 281
Partial Forms 281
AJAX Form Submission 283
Files in Forms 285
Django Formsets 288
Formset Factory 290
Formset Management Form and Formset Processing 290
Formset Custom Validation and Formset Errors 292
Chapter 7: Django Models 295
Django Models and the Migrations Workflow 295
Create Django Models 296
Migrations and the Django Model Workflow 297
Django Model Data Types 300
Limiting Values: max_length, min_value, max_value, max_digits, and decimal_places 307
Empty, Null and Not Null Values: Blank and Null 308
Predetermined Values: default, auto_now, auto_now_add, and choices 310
Unique values: unique, unique_for_date, unique_for_month and unique_for_year 313
Form Values: Editable, help_text, verbose_name, and error_messages 313
Database Definition Language (DDL) Values: db_column, db_index, db_tablespace, primary_key 314
Built-In and Custom Validators: Validators 315
Django Model Default and Custom Behaviors 316
Model Methods 316
save() method 316
delete() method 319
Validation methods: clean_fields(), clean(), validate_unique() and full_clean() 319
Data loading methods: Refresh_from_db(), from_db(), and get_deferred_fields() methods 323
Custom methods 324
Model Manager Field: Objects 324
Model Meta Class and Options 325
Database Definition Language (DDL) table options: db_table, db_tablespace, managed, required_db_vendor, required_db_features and unique_together 325
Database Definition Language (DDL) index options: Indexes and index_together 326
Naming convention options: verbose_name, verbose_name_plural, label, label_lower, and app_label 327
Inheritance Meta options: Abstract and proxy 328
Query Meta options: Ordering, order_with_respect_to, get_latest_by, default_manager_name, base_manager_name, default_related_name, and select_on_save 329
Permission Meta options: default_permissions and permissions 330
Relationships in Django Models 330
One to Many Relationships in Django Models 331
Many to Many Relationships in Django Models 331
One to One Relationships in Django Models 332
Options for Relationship Model Data Types 333
Data integrity options: on_delete 333
Reference options: Self, literal strings, and parent_link 334
Reverse relationships: related_name, related_query_name, and symmetrical 334
Database options: to_field, db_constraint, swappable, through, through_fields, and db_table 336
Form values: limit_choices_to 336
Django Model Transactions 337
Transaction per Request: ATOMIC_REQUESTS and Decorators 337
Context Manager and Callbacks: atomic() and on_commit() 338
Django Model Migrations 339
Migration File Creation 339
Migration File Renaming 340
Migration File Squashing 341
Migration File Structure 342
Migration File Rollback 343
Django Model Database Tasks 343
Backup Data: Fixtures, dumpdata, loaddata, and inspectdb 344
Delete Data: Flush, sqlflush, and sqlsequencereset 344
Interact with Data: dbshell 345
Django Model Initial Data Setup 345
Hard-code predefined records in Python migration file 345
SQL script with SQL statements 346
Django fixture file 348
Django Model Signals 349
Built-In Django Model Signals 350
Listen for Django Model Signals 350
Emit Custom Signals in Django Model Signals 353
Django Models Outside of models.py 354
Django Models Inside Apps in the Models Folder 354
Django Models Inside Apps in Custom Folders 355
Django Models Outside Apps and Model Assignment to Other Apps 356
Django Models and Multiple Databases 356
Multiple Databases for Django Models: using 357
Multiple Databases for Django Tools: --database 357
Multiple Database Routers: DATABASE_ROUTERS setting 357
Chapter 8: Django Model Queries and Managers 361
CRUD Single Records in Django Models 361
Create a Single Record with save() or create() 361
Read a Single Record with get() or get_or_create() 363
Update a Single Record with save(), update(), update_or_create(), or refresh_from_db() 365
Delete a Single Record with delete() 367
CRUD Multiple Records in Django Models 368
Create Multiple Records with bulk_create() 369
Read Multiple Records with all(), filter(), exclude(), or in_bulk() 371
Understanding a QuerySet: Lazy Evaluation and Caching 373
Read Performance Methods: defer(), only(), values(), values_list(), iterator(), exists(), and none() 376
Update Multiple Records with update() or select_for_update() 379
Delete Multiple Records with delete() 381
CRUD Relationship Records Across Django Models 381
One to Many CRUD Operations 381
Many to Many CRUD Operations 385
One to One CRUD Operations 387
Read Performance Relationship Methods: select_related() and prefetch_related() 388
Model Queries by SQL Keyword 390
WHERE Queries: Django Field Lookups 390
=/EQUAL and !=/NOT EQUAL queries: exact, iexact 391
AND queries 392
OR queries: Q() objects 392
IS and IS NOT queries: isnull 393
IN queries: in 393
LIKE and ILIKE queries: contains, icontains, startswith, istartswith, endswith, iendswith 394
REGEXP queries: regex, iregex 395
> /GREATER THAN and <
Date and time queries: Range, date, year, month, day, week, week_day, time, hour, minute, second 395
DISTINCT Queries 397
Dates and times queries: dates() and datetimes() 398
ORDER Queries: order_by() and reverse() 399
LIMIT Queries 400
LIMIT and OFFSET queries: Python slice syntax 400
Pseudo LIMIT 1 order queries: first() and last() 401
Pseudo LIMIT 1 date and time queries: latest() and earliest() 401
Merge Queries 401
QuerySet merger: Pipe and itertools.chain 401
UNION queries: union() 402
INTERSECT queries: intersection() 403
EXCEPT queries: difference() 403
Aggregation Queries 404
COUNT queries: count() method and Count() class 404
MAX, MIN, SUM, AVG, VARIANCE and STDDEV queries: Max(), Min(), Sum(), Avg(), Variance(), and StdDev() classes 406
Expression and Function Queries 407
SQL expression queries: F expressions 407
SQL function queries: Func expressions and Django database functions 409
SQL subqueries: Subquery expressions 410
Model Queries with Raw (Open-Ended) SQL 412
SQL Queries with a Model Manager’s raw() Method 413
SQL Queries with Python’s DB API 415
Model Managers 416
Custom and Multiple Model Managers 417
Custom Model Managers and QuerySet Classes with Methods 418
Custom Reverse Model Managers for Related Models 421
Chapter 9: Django Model Forms and Class Views 422
Django Model Form Structure and Workflow 422
Create Django Model Forms 423
Django Model Form Options and Field Mapping 424
Model Form Required Options: Model and Fields or Exclude 424
Model Form Default Field Mapping 425
Model Form New and Custom Fields: Widgets, Labels, help_texts, error_messages, field_classes, and localize_fields 427
Django Model Forms with Relationships 429
ModelChoiceField and ModelMultipleChoiceField Form Field Options: queryset, empty_label, to_field_name, and label_from_instance 429
Django Model Form Processing 432
Model Form Initialization: Initial and Instance 432
Model Form Validation 433
Django Model Formsets 435
Model Formset Factory 435
Class-Based Views with Models 436
Create Model Records with the Class-Based View CreateView 437
CreateView Fields and Methods 439
Basic CreateView options: Model, form_class, and success_url fields 439
Customize template name, MIME type and context: template_name and content_type fields and get_context_data( ) method 440
Customize form initialization and validation: Initial field, get_initial( ), get_form( ), form_valid( ), and form_invalid( ) methods 441
Customize view method workflow: get() and post() methods 443
Read Model Records with the Class-Based Views ListView and DetailView 445
ListView Fields and Methods 447
Basic ListView option: Model field 448
Customize template context reference name: context_object_name 448
Customize record list: Queryset and ordering fields and pagination behavior 448
DetailView Fields and Methods 450
Basic DetailView options: Model field and url with pk parameter 450
Customize url and query parameters: pk_url_kwarg, slug_field and slug_url_kwarg 451
Update Model Records with the Class-Based View UpateView 452
UpdateView Fields and Methods 454
Basic UpdateView options: Model, form_class and success_url fields, and url with pk parameter 454
Delete Records with the Class-Bases View DeleteView 455
DeleteView Fields and Methods 456
Basic DeleteView options: Model and success_url fields and url with pk parameter 456
Class-Based Views with Mixins 457
Chapter 10: Django User Management 459
Introduction to the Django User System 459
User Types, Subtypes, Groups, and Permissions 459
Create Users 460
Manage Users 463
Create and Manage Groups 468
Permission Types 470
User Permissions: Superuser, Staff, and Active 471
Model Permissions: Add, Change, Delete, and Custom 471
Model Meta permission options: default_permissions and permissions 472
Permission Checks and Enforcement 473
View Method Permission Checks 473
URL Permission Checks 476
Template Permission Checks 477
Class-Based View Permission Checks 478
User Authentication and Auto-Management 480
Login and Logout Workflow 481
Password Change Workflow 482
Password Reset Workflow 482
User Signup Workflow 483
Custom User Model Fields 485
Custom Authentication Back Ends 487
User Management with Django allauth 489
Install and Set Up django-allauth 489
First Log In and Log Out with Superuser in Django allauth 491
User Signup with Django allauth 493
Password Reset and Change with Django allauth 493
Add and Change User Email with Django allauth 494
Change Templates for Django allauth 495
Models and Database Tables Behind Django allauth 495
Social Authentication with Django allauth 496
Set Up Django allauth for Different Social Providers 496
Set Up Facebook with Django allauth 498
Set Up Google with Django allauth 504
Set Up Twitter with Django allauth 509
Chapter 11: Django admin Management 513
Set Up Django Models in the Django admin 513
Django admin Read Record Options 514
Record Display: list_display, format_html, empty_value_display 516
Record Order: admin_order_field and ordering 520
Record Links and Inline Edit: list_display_links and list_editable 521
Record Pagination: list_per_page, list_max_show_all, paginator 524
Record Search: search_fields, list_filter, show_full_result_count, preserve_filters 525
Record Dates: date_hierarchy 530
Record Actions: actions_on_top, actions_on_bottom, actions 532
Record Relationships 532
Display: list_display (continued) 533
Order: admin_order_field (continued) 534
Search: search_fields and list_filter (continued), admin.RelatedOnly FieldListFilter, list_select_related 535
Django admin Create, Update, Delete Record Options 537
Record Forms: fields, readonly_fields, exclude, fieldsets, formfield_overrides, form, prepopulated_fields 538
Actions, Links, and Positions: save_on_top, save_as(Clone records), save_as_continue and view_on_site 545
Relationships: filter_horizontal, filter_vertical, radio_fields, raw_id_fields, inlines 547
Django admin Custom Page Layout, Data, and Behaviors 554
Django admin Custom Global Values for Default Templates 554
Django admin Custom Page Layout with Custom Templates 556
Django admin Custom Static Resources 558
Django admin Custom Data and Behaviors with admin Class Fields and Methods 559
Django admin CRUD Permissions 561
Multiple Django admin Sites 563
Chapter 12: REST Services with Django 566
REST Services in Django 566
Standard View Method Designed as REST Service 567
Django REST Framework3 571
Django Tastypie Framework4 571
Django REST Framework Concepts and Introduction 572
Serializers and Views 572
Class-Based Views 575
Mixins and Generic Class-Based Views 576
View Sets and Routers 577
Django REST Framework Security 579
Set Up REST Framework Services Permissions 579
Set Up REST Framework Login Page 582
Appendix A: Python Basics 584
Strings, Unicode, and Other Annoying Text Behaviors 584
Methods Arguments: Default, optional, *args, and **kwargs 588
Classes and Subclasses 591
Loops, Iterators, and Generators 593
List Comprehensions, Generator Expressions, Maps, and Filters 598
Lambda Keyword for Anonymous Methods 600
Index 601
Erscheint lt. Verlag | 27.10.2017 |
---|---|
Zusatzinfo | XXVII, 593 p. 116 illus., 115 illus. in color. |
Verlagsort | Berkeley |
Sprache | englisch |
Themenwelt | Mathematik / Informatik ► Informatik ► Programmiersprachen / -werkzeuge |
Mathematik / Informatik ► Informatik ► Web / Internet | |
Schlagworte | application • Code • Development • Django • Framework • Python • Software |
ISBN-10 | 1-4842-2787-5 / 1484227875 |
ISBN-13 | 978-1-4842-2787-9 / 9781484227879 |
Haben Sie eine Frage zum Produkt? |
Größe: 10,9 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich