Olli Graf
1 year ago
14 changed files with 1063 additions and 0 deletions
@ -0,0 +1,37 @@ |
|||
#! /usr/bin/python3 |
|||
|
|||
from time import sleep |
|||
import logging |
|||
import Adafruit_DHT |
|||
|
|||
__PIN__ = 4 # GPIO Pin, den wir nutzen |
|||
__WAIT__ = 0.5 # Warten für 0,5 Sekunden |
|||
|
|||
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) |
|||
|
|||
def main(): |
|||
logging.debug('initialisiere Sensor') |
|||
dht22_sensor = Adafruit_DHT.DHT22 |
|||
logging.debug(f'Sensor initialisiert ${dht22_sensor}') |
|||
|
|||
while True: |
|||
|
|||
logging.debug('lese von Sensor') |
|||
feuchte, temp_c = Adafruit_DHT.read_retry(dht22_sensor, __PIN__) |
|||
|
|||
logging.debug(f'rel. Feuchte: ${feuchte:.2f}, Temperatur: ${temp_c:.2f}°C') |
|||
|
|||
|
|||
|
|||
if __name__ =='__main__': |
|||
try: |
|||
logging.debug('Programm startet') |
|||
main() |
|||
except KeyboardInterrupt: |
|||
pass |
|||
finally: |
|||
pass |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,14 @@ |
|||
from flask import Flask |
|||
|
|||
|
|||
app = Flask(__name__) |
|||
|
|||
@app.route('/') |
|||
|
|||
def index(): |
|||
return 'Ein erstes Hallo' |
|||
|
|||
if __name__ == '__main__': |
|||
app.run(host='0.0.0.0',port=8085, debug=True) |
|||
|
|||
|
@ -0,0 +1,16 @@ |
|||
#! /usr/bin/python3 |
|||
#encoding: utf-8 |
|||
|
|||
from flask import Flask |
|||
app = Flask(__name__) |
|||
|
|||
@app.route("/") |
|||
def hello(): |
|||
return "Hello World!" |
|||
|
|||
@app.route('/test') |
|||
def test(): |
|||
return 'Hello Test' |
|||
|
|||
app.run(host='0.0.0.0',port=8082) |
|||
|
@ -0,0 +1,4 @@ |
|||
#!/usr/bin/bash |
|||
export FLASK_APP=first |
|||
export FLASK_ENV=development |
|||
|
@ -0,0 +1,45 @@ |
|||
#encoding: utf-8 |
|||
import mysql.connector |
|||
import logging |
|||
|
|||
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) |
|||
class DBConnection(): |
|||
|
|||
def __init__(self): |
|||
self.dbconnection = None |
|||
|
|||
#Verbindung zur Datenbank mit den übergebenen Werten herstellen. |
|||
def connect(self, host, user, password, database): |
|||
|
|||
self.connection= mysql.connector.connect(host=host, user=user,password=password,database=database) |
|||
|
|||
# Verbindung trennen |
|||
def disconnect(self): |
|||
if self.connection is not None: |
|||
self.connection.close() |
|||
self.connection = None |
|||
|
|||
# Schüler-Record in die Tabelle einfügen. |
|||
def insertSchueler(self,schueler): |
|||
self.execute_query('insert into schueler (name,vorname) values(%s,%s)', (schueler['name'],schueler['vorname'])) |
|||
|
|||
# Liefert True, wenn die Verbindung zur DB besteht, sonst False |
|||
def isConnected(self): |
|||
if self.connection is not None: |
|||
return self.connection.is_connected() |
|||
return False |
|||
|
|||
# Wenn DB-Verbindung besteht, wird der Cursor geliefert, sonst None |
|||
def cursor(self): |
|||
if self.isConnected(): |
|||
return self.connection.cursor() |
|||
return None |
|||
|
|||
# Datenbank Kommando ausführen. Das params-Tupel wird in die Query eingesetzt. |
|||
# Liefert ein Resultset zurück. |
|||
def execute_query(self, query, params = None): |
|||
if self.isConnected(): |
|||
cursor = self.cursor() |
|||
if cursor is not None: |
|||
cursor.execute(query,params) #Kommdo ausführen |
|||
return cursor.fetchall() # Ergebnis zurückliefern. |
@ -0,0 +1,8 @@ |
|||
[pidb] |
|||
host=database |
|||
user=piuser |
|||
password=SW_Ep.6:ROTJ |
|||
database=pidb |
|||
|
|||
|
|||
|
@ -0,0 +1,14 @@ |
|||
from flask import Flask,render_template |
|||
|
|||
|
|||
app = Flask(__name__) |
|||
|
|||
@app.route('/') |
|||
|
|||
def index(): |
|||
return render_template('index.html') |
|||
|
|||
if __name__ == '__main__': |
|||
app.run(host='0.0.0.0',port=8085, debug=True) |
|||
|
|||
|
@ -0,0 +1,427 @@ |
|||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ |
|||
|
|||
/** |
|||
* 1. Set default font family to sans-serif. |
|||
* 2. Prevent iOS text size adjust after orientation change, without disabling |
|||
* user zoom. |
|||
*/ |
|||
|
|||
html { |
|||
font-family: sans-serif; /* 1 */ |
|||
-ms-text-size-adjust: 100%; /* 2 */ |
|||
-webkit-text-size-adjust: 100%; /* 2 */ |
|||
} |
|||
|
|||
/** |
|||
* Remove default margin. |
|||
*/ |
|||
|
|||
body { |
|||
margin: 0; |
|||
} |
|||
|
|||
/* HTML5 display definitions |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Correct `block` display not defined for any HTML5 element in IE 8/9. |
|||
* Correct `block` display not defined for `details` or `summary` in IE 10/11 |
|||
* and Firefox. |
|||
* Correct `block` display not defined for `main` in IE 11. |
|||
*/ |
|||
|
|||
article, |
|||
aside, |
|||
details, |
|||
figcaption, |
|||
figure, |
|||
footer, |
|||
header, |
|||
hgroup, |
|||
main, |
|||
menu, |
|||
nav, |
|||
section, |
|||
summary { |
|||
display: block; |
|||
} |
|||
|
|||
/** |
|||
* 1. Correct `inline-block` display not defined in IE 8/9. |
|||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. |
|||
*/ |
|||
|
|||
audio, |
|||
canvas, |
|||
progress, |
|||
video { |
|||
display: inline-block; /* 1 */ |
|||
vertical-align: baseline; /* 2 */ |
|||
} |
|||
|
|||
/** |
|||
* Prevent modern browsers from displaying `audio` without controls. |
|||
* Remove excess height in iOS 5 devices. |
|||
*/ |
|||
|
|||
audio:not([controls]) { |
|||
display: none; |
|||
height: 0; |
|||
} |
|||
|
|||
/** |
|||
* Address `[hidden]` styling not present in IE 8/9/10. |
|||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. |
|||
*/ |
|||
|
|||
[hidden], |
|||
template { |
|||
display: none; |
|||
} |
|||
|
|||
/* Links |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Remove the gray background color from active links in IE 10. |
|||
*/ |
|||
|
|||
a { |
|||
background-color: transparent; |
|||
} |
|||
|
|||
/** |
|||
* Improve readability when focused and also mouse hovered in all browsers. |
|||
*/ |
|||
|
|||
a:active, |
|||
a:hover { |
|||
outline: 0; |
|||
} |
|||
|
|||
/* Text-level semantics |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome. |
|||
*/ |
|||
|
|||
abbr[title] { |
|||
border-bottom: 1px dotted; |
|||
} |
|||
|
|||
/** |
|||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome. |
|||
*/ |
|||
|
|||
b, |
|||
strong { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
/** |
|||
* Address styling not present in Safari and Chrome. |
|||
*/ |
|||
|
|||
dfn { |
|||
font-style: italic; |
|||
} |
|||
|
|||
/** |
|||
* Address variable `h1` font-size and margin within `section` and `article` |
|||
* contexts in Firefox 4+, Safari, and Chrome. |
|||
*/ |
|||
|
|||
h1 { |
|||
font-size: 2em; |
|||
margin: 0.67em 0; |
|||
} |
|||
|
|||
/** |
|||
* Address styling not present in IE 8/9. |
|||
*/ |
|||
|
|||
mark { |
|||
background: #ff0; |
|||
color: #000; |
|||
} |
|||
|
|||
/** |
|||
* Address inconsistent and variable font size in all browsers. |
|||
*/ |
|||
|
|||
small { |
|||
font-size: 80%; |
|||
} |
|||
|
|||
/** |
|||
* Prevent `sub` and `sup` affecting `line-height` in all browsers. |
|||
*/ |
|||
|
|||
sub, |
|||
sup { |
|||
font-size: 75%; |
|||
line-height: 0; |
|||
position: relative; |
|||
vertical-align: baseline; |
|||
} |
|||
|
|||
sup { |
|||
top: -0.5em; |
|||
} |
|||
|
|||
sub { |
|||
bottom: -0.25em; |
|||
} |
|||
|
|||
/* Embedded content |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Remove border when inside `a` element in IE 8/9/10. |
|||
*/ |
|||
|
|||
img { |
|||
border: 0; |
|||
} |
|||
|
|||
/** |
|||
* Correct overflow not hidden in IE 9/10/11. |
|||
*/ |
|||
|
|||
svg:not(:root) { |
|||
overflow: hidden; |
|||
} |
|||
|
|||
/* Grouping content |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Address margin not present in IE 8/9 and Safari. |
|||
*/ |
|||
|
|||
figure { |
|||
margin: 1em 40px; |
|||
} |
|||
|
|||
/** |
|||
* Address differences between Firefox and other browsers. |
|||
*/ |
|||
|
|||
hr { |
|||
-moz-box-sizing: content-box; |
|||
box-sizing: content-box; |
|||
height: 0; |
|||
} |
|||
|
|||
/** |
|||
* Contain overflow in all browsers. |
|||
*/ |
|||
|
|||
pre { |
|||
overflow: auto; |
|||
} |
|||
|
|||
/** |
|||
* Address odd `em`-unit font size rendering in all browsers. |
|||
*/ |
|||
|
|||
code, |
|||
kbd, |
|||
pre, |
|||
samp { |
|||
font-family: monospace, monospace; |
|||
font-size: 1em; |
|||
} |
|||
|
|||
/* Forms |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Known limitation: by default, Chrome and Safari on OS X allow very limited |
|||
* styling of `select`, unless a `border` property is set. |
|||
*/ |
|||
|
|||
/** |
|||
* 1. Correct color not being inherited. |
|||
* Known issue: affects color of disabled elements. |
|||
* 2. Correct font properties not being inherited. |
|||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome. |
|||
*/ |
|||
|
|||
button, |
|||
input, |
|||
optgroup, |
|||
select, |
|||
textarea { |
|||
color: inherit; /* 1 */ |
|||
font: inherit; /* 2 */ |
|||
margin: 0; /* 3 */ |
|||
} |
|||
|
|||
/** |
|||
* Address `overflow` set to `hidden` in IE 8/9/10/11. |
|||
*/ |
|||
|
|||
button { |
|||
overflow: visible; |
|||
} |
|||
|
|||
/** |
|||
* Address inconsistent `text-transform` inheritance for `button` and `select`. |
|||
* All other form control elements do not inherit `text-transform` values. |
|||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. |
|||
* Correct `select` style inheritance in Firefox. |
|||
*/ |
|||
|
|||
button, |
|||
select { |
|||
text-transform: none; |
|||
} |
|||
|
|||
/** |
|||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` |
|||
* and `video` controls. |
|||
* 2. Correct inability to style clickable `input` types in iOS. |
|||
* 3. Improve usability and consistency of cursor style between image-type |
|||
* `input` and others. |
|||
*/ |
|||
|
|||
button, |
|||
html input[type="button"], /* 1 */ |
|||
input[type="reset"], |
|||
input[type="submit"] { |
|||
-webkit-appearance: button; /* 2 */ |
|||
cursor: pointer; /* 3 */ |
|||
} |
|||
|
|||
/** |
|||
* Re-set default cursor for disabled elements. |
|||
*/ |
|||
|
|||
button[disabled], |
|||
html input[disabled] { |
|||
cursor: default; |
|||
} |
|||
|
|||
/** |
|||
* Remove inner padding and border in Firefox 4+. |
|||
*/ |
|||
|
|||
button::-moz-focus-inner, |
|||
input::-moz-focus-inner { |
|||
border: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
/** |
|||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in |
|||
* the UA stylesheet. |
|||
*/ |
|||
|
|||
input { |
|||
line-height: normal; |
|||
} |
|||
|
|||
/** |
|||
* It's recommended that you don't attempt to style these elements. |
|||
* Firefox's implementation doesn't respect box-sizing, padding, or width. |
|||
* |
|||
* 1. Address box sizing set to `content-box` in IE 8/9/10. |
|||
* 2. Remove excess padding in IE 8/9/10. |
|||
*/ |
|||
|
|||
input[type="checkbox"], |
|||
input[type="radio"] { |
|||
box-sizing: border-box; /* 1 */ |
|||
padding: 0; /* 2 */ |
|||
} |
|||
|
|||
/** |
|||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain |
|||
* `font-size` values of the `input`, it causes the cursor style of the |
|||
* decrement button to change from `default` to `text`. |
|||
*/ |
|||
|
|||
input[type="number"]::-webkit-inner-spin-button, |
|||
input[type="number"]::-webkit-outer-spin-button { |
|||
height: auto; |
|||
} |
|||
|
|||
/** |
|||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome. |
|||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome |
|||
* (include `-moz` to future-proof). |
|||
*/ |
|||
|
|||
input[type="search"] { |
|||
-webkit-appearance: textfield; /* 1 */ |
|||
-moz-box-sizing: content-box; |
|||
-webkit-box-sizing: content-box; /* 2 */ |
|||
box-sizing: content-box; |
|||
} |
|||
|
|||
/** |
|||
* Remove inner padding and search cancel button in Safari and Chrome on OS X. |
|||
* Safari (but not Chrome) clips the cancel button when the search input has |
|||
* padding (and `textfield` appearance). |
|||
*/ |
|||
|
|||
input[type="search"]::-webkit-search-cancel-button, |
|||
input[type="search"]::-webkit-search-decoration { |
|||
-webkit-appearance: none; |
|||
} |
|||
|
|||
/** |
|||
* Define consistent border, margin, and padding. |
|||
*/ |
|||
|
|||
fieldset { |
|||
border: 1px solid #c0c0c0; |
|||
margin: 0 2px; |
|||
padding: 0.35em 0.625em 0.75em; |
|||
} |
|||
|
|||
/** |
|||
* 1. Correct `color` not being inherited in IE 8/9/10/11. |
|||
* 2. Remove padding so people aren't caught out if they zero out fieldsets. |
|||
*/ |
|||
|
|||
legend { |
|||
border: 0; /* 1 */ |
|||
padding: 0; /* 2 */ |
|||
} |
|||
|
|||
/** |
|||
* Remove default vertical scrollbar in IE 8/9/10/11. |
|||
*/ |
|||
|
|||
textarea { |
|||
overflow: auto; |
|||
} |
|||
|
|||
/** |
|||
* Don't inherit the `font-weight` (applied by a rule above). |
|||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X. |
|||
*/ |
|||
|
|||
optgroup { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
/* Tables |
|||
========================================================================== */ |
|||
|
|||
/** |
|||
* Remove most spacing between table cells. |
|||
*/ |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
border-spacing: 0; |
|||
} |
|||
|
|||
td, |
|||
th { |
|||
padding: 0; |
|||
} |
@ -0,0 +1,418 @@ |
|||
/* |
|||
* Skeleton V2.0.4 |
|||
* Copyright 2014, Dave Gamache |
|||
* www.getskeleton.com |
|||
* Free to use under the MIT license. |
|||
* http://www.opensource.org/licenses/mit-license.php |
|||
* 12/29/2014 |
|||
*/ |
|||
|
|||
|
|||
/* Table of contents |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– |
|||
- Grid |
|||
- Base Styles |
|||
- Typography |
|||
- Links |
|||
- Buttons |
|||
- Forms |
|||
- Lists |
|||
- Code |
|||
- Tables |
|||
- Spacing |
|||
- Utilities |
|||
- Clearing |
|||
- Media Queries |
|||
*/ |
|||
|
|||
|
|||
/* Grid |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
.container { |
|||
position: relative; |
|||
width: 100%; |
|||
max-width: 960px; |
|||
margin: 0 auto; |
|||
padding: 0 20px; |
|||
box-sizing: border-box; } |
|||
.column, |
|||
.columns { |
|||
width: 100%; |
|||
float: left; |
|||
box-sizing: border-box; } |
|||
|
|||
/* For devices larger than 400px */ |
|||
@media (min-width: 400px) { |
|||
.container { |
|||
width: 85%; |
|||
padding: 0; } |
|||
} |
|||
|
|||
/* For devices larger than 550px */ |
|||
@media (min-width: 550px) { |
|||
.container { |
|||
width: 80%; } |
|||
.column, |
|||
.columns { |
|||
margin-left: 4%; } |
|||
.column:first-child, |
|||
.columns:first-child { |
|||
margin-left: 0; } |
|||
|
|||
.one.column, |
|||
.one.columns { width: 4.66666666667%; } |
|||
.two.columns { width: 13.3333333333%; } |
|||
.three.columns { width: 22%; } |
|||
.four.columns { width: 30.6666666667%; } |
|||
.five.columns { width: 39.3333333333%; } |
|||
.six.columns { width: 48%; } |
|||
.seven.columns { width: 56.6666666667%; } |
|||
.eight.columns { width: 65.3333333333%; } |
|||
.nine.columns { width: 74.0%; } |
|||
.ten.columns { width: 82.6666666667%; } |
|||
.eleven.columns { width: 91.3333333333%; } |
|||
.twelve.columns { width: 100%; margin-left: 0; } |
|||
|
|||
.one-third.column { width: 30.6666666667%; } |
|||
.two-thirds.column { width: 65.3333333333%; } |
|||
|
|||
.one-half.column { width: 48%; } |
|||
|
|||
/* Offsets */ |
|||
.offset-by-one.column, |
|||
.offset-by-one.columns { margin-left: 8.66666666667%; } |
|||
.offset-by-two.column, |
|||
.offset-by-two.columns { margin-left: 17.3333333333%; } |
|||
.offset-by-three.column, |
|||
.offset-by-three.columns { margin-left: 26%; } |
|||
.offset-by-four.column, |
|||
.offset-by-four.columns { margin-left: 34.6666666667%; } |
|||
.offset-by-five.column, |
|||
.offset-by-five.columns { margin-left: 43.3333333333%; } |
|||
.offset-by-six.column, |
|||
.offset-by-six.columns { margin-left: 52%; } |
|||
.offset-by-seven.column, |
|||
.offset-by-seven.columns { margin-left: 60.6666666667%; } |
|||
.offset-by-eight.column, |
|||
.offset-by-eight.columns { margin-left: 69.3333333333%; } |
|||
.offset-by-nine.column, |
|||
.offset-by-nine.columns { margin-left: 78.0%; } |
|||
.offset-by-ten.column, |
|||
.offset-by-ten.columns { margin-left: 86.6666666667%; } |
|||
.offset-by-eleven.column, |
|||
.offset-by-eleven.columns { margin-left: 95.3333333333%; } |
|||
|
|||
.offset-by-one-third.column, |
|||
.offset-by-one-third.columns { margin-left: 34.6666666667%; } |
|||
.offset-by-two-thirds.column, |
|||
.offset-by-two-thirds.columns { margin-left: 69.3333333333%; } |
|||
|
|||
.offset-by-one-half.column, |
|||
.offset-by-one-half.columns { margin-left: 52%; } |
|||
|
|||
} |
|||
|
|||
|
|||
/* Base Styles |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
/* NOTE |
|||
html is set to 62.5% so that all the REM measurements throughout Skeleton |
|||
are based on 10px sizing. So basically 1.5rem = 15px :) */ |
|||
html { |
|||
font-size: 62.5%; } |
|||
body { |
|||
font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ |
|||
line-height: 1.6; |
|||
font-weight: 400; |
|||
font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; |
|||
color: #222; } |
|||
|
|||
|
|||
/* Typography |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
h1, h2, h3, h4, h5, h6 { |
|||
margin-top: 0; |
|||
margin-bottom: 2rem; |
|||
font-weight: 300; } |
|||
h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} |
|||
h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } |
|||
h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } |
|||
h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } |
|||
h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } |
|||
h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } |
|||
|
|||
/* Larger than phablet */ |
|||
@media (min-width: 550px) { |
|||
h1 { font-size: 5.0rem; } |
|||
h2 { font-size: 4.2rem; } |
|||
h3 { font-size: 3.6rem; } |
|||
h4 { font-size: 3.0rem; } |
|||
h5 { font-size: 2.4rem; } |
|||
h6 { font-size: 1.5rem; } |
|||
} |
|||
|
|||
p { |
|||
margin-top: 0; } |
|||
|
|||
|
|||
/* Links |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
a { |
|||
color: #1EAEDB; } |
|||
a:hover { |
|||
color: #0FA0CE; } |
|||
|
|||
|
|||
/* Buttons |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
.button, |
|||
button, |
|||
input[type="submit"], |
|||
input[type="reset"], |
|||
input[type="button"] { |
|||
display: inline-block; |
|||
height: 38px; |
|||
padding: 0 30px; |
|||
color: #555; |
|||
text-align: center; |
|||
font-size: 11px; |
|||
font-weight: 600; |
|||
line-height: 38px; |
|||
letter-spacing: .1rem; |
|||
text-transform: uppercase; |
|||
text-decoration: none; |
|||
white-space: nowrap; |
|||
background-color: transparent; |
|||
border-radius: 4px; |
|||
border: 1px solid #bbb; |
|||
cursor: pointer; |
|||
box-sizing: border-box; } |
|||
.button:hover, |
|||
button:hover, |
|||
input[type="submit"]:hover, |
|||
input[type="reset"]:hover, |
|||
input[type="button"]:hover, |
|||
.button:focus, |
|||
button:focus, |
|||
input[type="submit"]:focus, |
|||
input[type="reset"]:focus, |
|||
input[type="button"]:focus { |
|||
color: #333; |
|||
border-color: #888; |
|||
outline: 0; } |
|||
.button.button-primary, |
|||
button.button-primary, |
|||
input[type="submit"].button-primary, |
|||
input[type="reset"].button-primary, |
|||
input[type="button"].button-primary { |
|||
color: #FFF; |
|||
background-color: #33C3F0; |
|||
border-color: #33C3F0; } |
|||
.button.button-primary:hover, |
|||
button.button-primary:hover, |
|||
input[type="submit"].button-primary:hover, |
|||
input[type="reset"].button-primary:hover, |
|||
input[type="button"].button-primary:hover, |
|||
.button.button-primary:focus, |
|||
button.button-primary:focus, |
|||
input[type="submit"].button-primary:focus, |
|||
input[type="reset"].button-primary:focus, |
|||
input[type="button"].button-primary:focus { |
|||
color: #FFF; |
|||
background-color: #1EAEDB; |
|||
border-color: #1EAEDB; } |
|||
|
|||
|
|||
/* Forms |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
input[type="email"], |
|||
input[type="number"], |
|||
input[type="search"], |
|||
input[type="text"], |
|||
input[type="tel"], |
|||
input[type="url"], |
|||
input[type="password"], |
|||
textarea, |
|||
select { |
|||
height: 38px; |
|||
padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ |
|||
background-color: #fff; |
|||
border: 1px solid #D1D1D1; |
|||
border-radius: 4px; |
|||
box-shadow: none; |
|||
box-sizing: border-box; } |
|||
/* Removes awkward default styles on some inputs for iOS */ |
|||
input[type="email"], |
|||
input[type="number"], |
|||
input[type="search"], |
|||
input[type="text"], |
|||
input[type="tel"], |
|||
input[type="url"], |
|||
input[type="password"], |
|||
textarea { |
|||
-webkit-appearance: none; |
|||
-moz-appearance: none; |
|||
appearance: none; } |
|||
textarea { |
|||
min-height: 65px; |
|||
padding-top: 6px; |
|||
padding-bottom: 6px; } |
|||
input[type="email"]:focus, |
|||
input[type="number"]:focus, |
|||
input[type="search"]:focus, |
|||
input[type="text"]:focus, |
|||
input[type="tel"]:focus, |
|||
input[type="url"]:focus, |
|||
input[type="password"]:focus, |
|||
textarea:focus, |
|||
select:focus { |
|||
border: 1px solid #33C3F0; |
|||
outline: 0; } |
|||
label, |
|||
legend { |
|||
display: block; |
|||
margin-bottom: .5rem; |
|||
font-weight: 600; } |
|||
fieldset { |
|||
padding: 0; |
|||
border-width: 0; } |
|||
input[type="checkbox"], |
|||
input[type="radio"] { |
|||
display: inline; } |
|||
label > .label-body { |
|||
display: inline-block; |
|||
margin-left: .5rem; |
|||
font-weight: normal; } |
|||
|
|||
|
|||
/* Lists |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
ul { |
|||
list-style: circle inside; } |
|||
ol { |
|||
list-style: decimal inside; } |
|||
ol, ul { |
|||
padding-left: 0; |
|||
margin-top: 0; } |
|||
ul ul, |
|||
ul ol, |
|||
ol ol, |
|||
ol ul { |
|||
margin: 1.5rem 0 1.5rem 3rem; |
|||
font-size: 90%; } |
|||
li { |
|||
margin-bottom: 1rem; } |
|||
|
|||
|
|||
/* Code |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
code { |
|||
padding: .2rem .5rem; |
|||
margin: 0 .2rem; |
|||
font-size: 90%; |
|||
white-space: nowrap; |
|||
background: #F1F1F1; |
|||
border: 1px solid #E1E1E1; |
|||
border-radius: 4px; } |
|||
pre > code { |
|||
display: block; |
|||
padding: 1rem 1.5rem; |
|||
white-space: pre; } |
|||
|
|||
|
|||
/* Tables |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
th, |
|||
td { |
|||
padding: 12px 15px; |
|||
text-align: left; |
|||
border-bottom: 1px solid #E1E1E1; } |
|||
th:first-child, |
|||
td:first-child { |
|||
padding-left: 0; } |
|||
th:last-child, |
|||
td:last-child { |
|||
padding-right: 0; } |
|||
|
|||
|
|||
/* Spacing |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
button, |
|||
.button { |
|||
margin-bottom: 1rem; } |
|||
input, |
|||
textarea, |
|||
select, |
|||
fieldset { |
|||
margin-bottom: 1.5rem; } |
|||
pre, |
|||
blockquote, |
|||
dl, |
|||
figure, |
|||
table, |
|||
p, |
|||
ul, |
|||
ol, |
|||
form { |
|||
margin-bottom: 2.5rem; } |
|||
|
|||
|
|||
/* Utilities |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
.u-full-width { |
|||
width: 100%; |
|||
box-sizing: border-box; } |
|||
.u-max-full-width { |
|||
max-width: 100%; |
|||
box-sizing: border-box; } |
|||
.u-pull-right { |
|||
float: right; } |
|||
.u-pull-left { |
|||
float: left; } |
|||
|
|||
|
|||
/* Misc |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
hr { |
|||
margin-top: 3rem; |
|||
margin-bottom: 3.5rem; |
|||
border-width: 0; |
|||
border-top: 1px solid #E1E1E1; } |
|||
|
|||
|
|||
/* Clearing |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
|
|||
/* Self Clearing Goodness */ |
|||
.container:after, |
|||
.row:after, |
|||
.u-cf { |
|||
content: ""; |
|||
display: table; |
|||
clear: both; } |
|||
|
|||
|
|||
/* Media Queries |
|||
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
|||
/* |
|||
Note: The best way to structure the use of media queries is to create the queries |
|||
near the relevant code. For example, if you wanted to change the styles for buttons |
|||
on small devices, paste the mobile query code up in the buttons section and style it |
|||
there. |
|||
*/ |
|||
|
|||
|
|||
/* Larger than mobile */ |
|||
@media (min-width: 400px) {} |
|||
|
|||
/* Larger than phablet (also point when grid becomes active) */ |
|||
@media (min-width: 550px) {} |
|||
|
|||
/* Larger than tablet */ |
|||
@media (min-width: 750px) {} |
|||
|
|||
/* Larger than desktop */ |
|||
@media (min-width: 1000px) {} |
|||
|
|||
/* Larger than Desktop HD */ |
|||
@media (min-width: 1200px) {} |
@ -0,0 +1,3 @@ |
|||
p { |
|||
color:green; |
|||
} |
@ -0,0 +1,14 @@ |
|||
<!DOCTYPE html> |
|||
|
|||
<html lang='en'> |
|||
<head> |
|||
<meta charset='utf-8' /> |
|||
<title>Titlevon static/index.html</title> |
|||
</head> |
|||
|
|||
<body> |
|||
<p> |
|||
Ich bin der <strong>Seiteninhalt <em>23</em></strong> |
|||
</p> |
|||
</body> |
|||
</html |
@ -0,0 +1,30 @@ |
|||
from flask import Flask,render_template |
|||
from DBConnection import DBConnection |
|||
import logging |
|||
import configparser |
|||
|
|||
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) |
|||
|
|||
config = configparser.ConfigParser() |
|||
config.read('db.ini') |
|||
|
|||
db_connection = DBConnection() |
|||
db_connection.connect(config['pidb']['host'],config['pidb']['user'],config['pidb']['password'],config['pidb']['database']) |
|||
app = Flask(__name__) |
|||
|
|||
schueler = [ |
|||
{'name':'Simpson','vorname': 'Bart'}, |
|||
{'name':'Simpson','vorname':'Lisa'}, |
|||
{'name':'van Houten','vorname':'Milhouse'}, |
|||
{'name':'Wiggum','vorname':'Ralph'}, |
|||
{'name':'Jones','vorname':'Jimbo'} |
|||
] |
|||
|
|||
@app.route('/') |
|||
def index(): |
|||
return render_template('students.html',schueler=schueler) |
|||
|
|||
if __name__ == '__main__': |
|||
app.run(host='0.0.0.0',port=8085, debug=True) |
|||
|
|||
|
@ -0,0 +1,14 @@ |
|||
<!DOCTYPE html> |
|||
|
|||
<html lang='en'> |
|||
<head> |
|||
<meta charset='utf-8' /> |
|||
<title>Title von templates/index.html</title> |
|||
</head> |
|||
|
|||
<body> |
|||
<p> |
|||
Ich bin der <strong>Seiteninhalt <em>23</em></strong> |
|||
</p> |
|||
</body> |
|||
</html |
@ -0,0 +1,19 @@ |
|||
<!DOCTYPE html> |
|||
|
|||
<html lang='de'> |
|||
<head> |
|||
<meta charset='utf-8' /> |
|||
<title>Schüler</title> |
|||
</head> |
|||
|
|||
<body> |
|||
<p> |
|||
Schülerverzeichnis |
|||
</p> |
|||
<ul> |
|||
{% for s in schueler %} |
|||
<li>{{s['name']}}, {{s['vorname']}}</li> |
|||
{%endfor %} |
|||
</ul> |
|||
</body> |
|||
</html |
Loading…
Reference in new issue