quote:Beste,
Vooraf, PY staat voor Python en DJ voor het webframework Django. Ik ben hier nog niet zo lang mee bezig en ik vind het best leuk.
Stel je hebt een inlogpagina. Op het moment dat je al ingelogd bent en je bezoekt die pagina dan krijg je een melding dat je al ingelogd bent. Of als je wilt uitloggen, terwijl je niet uitgelogd bent krijg je daar ook een melding van. Qua opbouw hetzelfde dus ik wil hier geen twee templates voor gebruiken. DRY dus. (Vroeger in php gebruikte ik hier een MessageException voor.)
Dus ik denk ik los dit zo op.
return render_to_response('message.html', {"title": "Login", "content": "U bent succesvol ingelogd."})
Dit werkt goed, totdat ik iets wilde doen als <a href="link">Klik hier om door te gaan</a>. Dit loste ik op door in message.html "{{ content|safe }}" te doen ipv zonder |safe.
Maar als ik nou {% url iuser.views.login %} als link wil doen, dan wordt dat letterlijk genomen en niet omgezet tot een link. Logisch, want het is een template tag en geen view tag ofzo. Hiervoor is dan de oplossing urlresolvers.reverse. Alleen dit krijg ik niet aan de praat. Help!
Daarnaast vind ik het nog niet goed dat ik nou html gebruik in een view. Is dit not done, of in dit geval wel verantwoord toegepast? Zijn er (betere) alternatieven om zo'n standaard bericht terug te sturen?
Nou heb ik ook nog een tweede vraag. Ik heb het volgende scriptje gevonden: klik. Dit lijkt mij wel handig, maar ik heb geen idee waar ik dit moet plaatsen. Daarnaast weer mijn vraag, is dit 'verantwoord'? (Niet tegen een bepaalde principe (van Python/Django) in ofzo)
Alvast bedankt,
Michiel
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | """ A parent process may raise this if a child process produces an error. """ pass def execute_in_child_process(f, traceback_file="traceback"): """ Decorator that makes a function execute in a child process. INPUT: - ``f`` - function - ``traceback_file`` - string (default: "traceback") OUTPUT: - function - create a child process, call f from there and return f's result REMARKS: - The side effects of f (such as caching) are thrown away. So make sure that all important information is in the output of f. In fact, reducing memory leaks is the intended use of the decorator. - If f raises an exception, the traceback is stored in traceback_file and a ChildProcessError is raised by the new function. EXAMPLES: TODO """ def new_f(*args, **kwargs): def child_process(conn): try: result = f(*args, **kwargs) except BaseException: message = "the traceback is in the file '%s'" % traceback_file conn.send(ChildProcessError(message)) conn.close() with open(traceback_file, 'a') as tr_file: traceback.print_exc(file=tr_file) return conn.send(result) conn.close() parent_conn, child_conn = Pipe() p = Process(target=child_process, args=(child_conn,)) p.start() result = parent_conn.recv() p.join() if isinstance(result, ChildProcessError): raise result return result return new_f |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | for aantalpersoort in range(1,20): if aantalpersoort == 1: prijsperstuk = 1.85 elif 1 < aantalpersoort < 6: prijsperstuk = 1.70 else: prijsperstuk = 1.55 aantal = aantalsoorten * aantalpersoort if 2 < aantal < 6: verzendkosten = 1.76 elif 6 <= aantal < 11: verzendkosten = 3.60 else: verzendkosten = 6.75 totaalkosten = verzendkosten + aantal*prijsperstuk totaalperstuk = totaalkosten / float(aantal) print (int(totaalperstuk*100)-160) * "X", aantalpersoort, "->", "%.2f" % totaalperstuk |
Ik gebruik het nogal eens om stukken code in het open source CAS SAGE te 'compileren', ik vind het ook fantastisch om de voordelen van 'high-level' Python gecombineerd te zien met uitvoeringssnelheden in dezelfde orde als C!quote:Op woensdag 26 mei 2010 08:42 schreef thabit het volgende:
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
Een taal die ook het gemak van python probeert te combineren met de snelheid van c is go. Het is een vrij nieuwe taal, maar het heeft wel potentie om groot te worden aangezien google er achter zit.quote:Op woensdag 26 mei 2010 08:42 schreef thabit het volgende:
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
| 1 | stdscr.refresh() |
Heb je hier misschien wat aan?quote:Op zaterdag 19 april 2014 01:46 schreef Chandler het volgende:
Algemeen vraagje; ik ben bezig Python om video's en foto's te kunnen schieten met de raspberry pi en de pi camera. Echter ben ik opzoek naar een nette / snelle methode om te kijken of 2 afbeeldingen op elkaar lijken. Nu heb ik al verschillende snippets gevonden maar veel wijzer wordt ik daar niet van.
Weet iemand een snelle simpele manier om via python (zonder een system call) 2 afbeeldingen te vergelijken (eventueel te verkleinen, zwart-wit te maken)?
Thanks!
Op zich wel, heb er nu al een tijdje door de docs heen zitten scrollen maar zie niet echt een mogelijkheid om 'compare' zonder commandline te doen, het vergelijken van 2 beelden. Heb je een voorbeeld gezien?quote:Op zondag 20 april 2014 16:20 schreef robin007bond het volgende:
[..]
Heb je hier misschien wat aan?
https://wiki.python.org/moin/ImageMagick
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | try: motionFilename = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.h264' while True: camera.wait_recording(1) # if motion is detected, record for xx time and the video every xx seconds if detect_motion(): # Once we've detected motion, keep recording for xx seconds # and only then dump the stream to disk camera.wait_recording(motionVideoTime) write_video(stream, motionFilename) # else: # break; finally: # no motion detected anymore? stop recording camera.stop_recording() # remove first frame, so we need to run multiple runs for new 'screens' prior_image = None |
Wat is het nut van een try zonder catch?quote:Op maandag 21 april 2014 17:19 schreef Chandler het volgende:
Even een andere vraag, waarom kom ik nooit uit op finally? ik dacht dat een else met break werkte niet.. hoe kan ik zorgen dat ik bij een false op motion detect de finally bereik?
[ code verwijderd ]
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | #python example import io import time import math # for microtime import datetime # for date import os # for system calls import datetime from PIL import Image import ImageChops import operator import picamera # functions def avg(values): if type(values) == type(1): return values return sum(values)//len(values) def hamming_distance(a_list, b_list): return sum(item1 != item2 for item1, item2 in zip(a_list, b_list)) def num_pairs(num_items): num_pairs = 0 while num_items > 0: num_items -= 1 num_pairs += num_items return num_pairs def compare(image1, image2): image1 = image1.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image1.getdata())) # del image1 pixel_avg = avg(grayscale_pixels) first = [(pixel > pixel_avg) for pixel in grayscale_pixels] image2 = image2.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image2.getdata())) # del image2 pixel_avg = avg(grayscale_pixels) second = [(pixel > pixel_avg) for pixel in grayscale_pixels] return ((64 - hamming_distance(first, second)) * 100) // 64 def getFreeSpace(): # read free space from current path. st = os.statvfs(os.getcwd()) du = st.f_bavail * st.f_frsize return du def bytes2human(n): symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') prefix = {} for i, s in enumerate(symbols): prefix[s] = 1 << (i + 1) * 10 for s in reversed(symbols): if n >= prefix[s]: value = float(n) / prefix[s] return '%.1f%s' % (value, s) return "%sB" % n def detect_motion(): global camera, prior_image, current_image global motionShotWidth, motionShotHeight stream = io.BytesIO() # camera.capture(stream, format = 'jpeg', use_video_port = True) camera.capture(stream, format = 'jpeg', use_video_port = True, resize = (motionShotWidth, motionShotHeight)) stream.seek(0) if prior_image is None: # print ("{} - First motion saved".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) prior_image = Image.open(stream) prior_image.save('first.jpg', 'jpeg', quality=80, optimize=True, progressive=True) return 0 # false else: # print ("{} - Second motion saved".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) current_image = Image.open(stream) current_image.save('second.jpg', 'jpeg', quality=80, optimize=True, progressive=True) # we want this in percent of difference, all below 90 is for continue recording, all higher could end. procent = compare(prior_image, current_image) if procent < 80: print ("{} - Motion detected!!! {}%".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), procent)) return True # image_found = 1 else: print ("{} - NO motion detected {}%".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), procent)) # image_found = 0 prior_image = current_image return False # return image_found def write_video(stream, filename): # Write the entire content of the circular buffer to disk with io.open(filename, 'wb') as output: with stream.lock: for frame in stream.frames: if frame.header: stream.seek(frame.position) break while True: buf = stream.read1() if not buf: break output.write(buf) def takeTimeleapseShot(): global camera, timeLeapseWidth, timeLeapseHeight, timeLeapseDirectory global prior_image # create variable for timeLeapseshot if not os.path.exists(timeLeapseDirectory): os.makedirs(timeLeapseDirectory) directory = timeLeapseDirectory + '/' + datetime.datetime.now().strftime('%Y-%m-%d') if not os.path.exists(directory): os.makedirs(directory) tlshot = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.jpg' # set resolution and take the shot! camera.resolution = (timeLeapseWidth, timeLeapseHeight) camera.capture(tlshot, 'jpeg') return def takeMovementShot(): global camera global motionVideoWidth, motionVideoHeight, motionVideoTime, motionDirectory if not os.path.exists(motionDirectory): os.makedirs(motionDirectory) # is motion detected? if detect_motion(): # display that motion is detected # print("{} -++ Motion detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) # set camera resolution for the motion video camera.resolution = (motionVideoWidth, motionVideoHeight) # open stream for the recording stream = picamera.PiCameraCircularIO(camera, seconds=5) # start recording the stream in format h264 camera.start_recording(stream, format = 'h264') try: directory = motionDirectory + '/' + datetime.datetime.now().strftime('%Y-%m-%d') if not os.path.exists(directory): os.makedirs(directory) motionFilename = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.h264' while (True): camera.wait_recording(1) # if motion is detected, record for xx time and the video every xx seconds if detect_motion() == True: # Once we've detected motion, keep recording for xx seconds # and only then dump the stream to disk print("{} -++ Recording for {} seconds".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), motionVideoTime)) camera.wait_recording(motionVideoTime) write_video(stream, motionFilename) else: break; finally: # no motion detected anymore? stop recording print("{} - End recording, no more motion detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) camera.stop_recording() # remove first frame, so we need to run multiple runs for new 'screens' prior_image = None print("{} -++ Exit function".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) # variables timeLeapseWidth = 1920 timeLeapseHeight = 1080 timeLeapseDirectory = 'timeleapseshot' motionShotWidth = 102 motionShotHeight = 77 motionVideoWidth = 1024 motionVideoHeight = 768 motionVideoTime = 5 motionDirectory = 'motion' # for image comparisson prior_image = None # for comparing images imageChops maximum_rms = 15 # for comparing images commandline imageDifference = 75; # start the picamera camera = picamera.PiCamera() # disable camera led camera.led = False # Keep 500 mb free on disk diskSpaceToReserve = 500 * 1024 * 1024 # seconds timerLoop = time.time() + (3600 * 24) # microseconds (100000 is one second) timerDelay = 0.005 # init loopCounter loopCounter = 0 currentTimer = 0 # array for timeleapse shot timerArray = {} timerArray[0] = {} timerArray[0]['each'] = 5 timerArray[0]['last'] = time.time() timerArray[0]['time'] = 0 timerArray[0]['timemin'] = 0 timerArray[0]['timemax'] = 0 timerArray[0]['counter'] = 0 timerArray[0]['execute'] = 'takeTimeleapseShot' timerArray[0]['title'] = 'Take timeleapse shot' timerArray[1] = {} timerArray[1]['each'] = 0.25 timerArray[1]['last'] = time.time() timerArray[1]['time'] = 0 timerArray[1]['timemin'] = 0 timerArray[1]['timemax'] = 0 timerArray[1]['counter'] = 0 timerArray[1]['execute'] = 'takeMovementShot' timerArray[1]['title'] = 'Take motion shot' # main script while True: timeLeft = timerLoop - time.time() loopCounter = loopCounter + 1 for (key, s) in timerArray.items(): if s['each'] > 0: if (s['last'] == 0) or (time.time() - s['last'] > s['each']): print ("{} - Function {} starting".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), s['execute'])) c = s['counter'] + 1 currentTimer = time.time() # start function locals()[s['execute']]() endTimer = time.time() - currentTimer print ("{} - {} secs left - {} - {} (# {})".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), math.trunc(timeLeft), loopCounter, s['title'], c)) # save information about last function timerArray[key]['last'] = time.time() timerArray[key]['counter'] += 1 timerArray[key]['time'] = timerArray[key]['time'] + endTimer # save min/max time for benchmarking if (timerArray[key]['timemin'] == 0) or (timerArray[key]['timemin'] != 0 and timerArray[key]['timemin'] > endTimer): timerArray[key]['timemin'] = endTimer if (timerArray[key]['timemax'] == 0) or (timerArray[key]['timemax'] != 0 and timerArray[key]['timemax'] < endTimer): timerArray[key]['timemax'] = endTimer # sleep for timerDelay seconds (or microseconds) time.sleep(timerDelay) # break when time has reached its end. if time.time() > timerLoop: print(timerArray) break # break when free space is lower then given value if getFreeSpace() < diskSpaceToReserve: print("{} - Exiting: No more free space {} free".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), bytes2human(getFreeSpace()))) # close camera camera.close() |
Oké. Hmm. Ik ben gewend om objectgeoriënteerd te programmeren, dus het is even wennen voor mij om een lijst met functies te lezen.quote:Op dinsdag 22 april 2014 18:55 schreef Chandler het volgende:
Euh... geen idee, zo uit een snippet gehaald en aangepast zodat het werkte zoals ik het wenste
Heb je een betere opzet?
In 2 weken python geleerd en dit is met kopieren en plakken en een hoop aanpassen m'n huidige scriptje
[ code verwijderd ]
Graag hoor ik opbouwende comments!
| 1 2 3 4 5 6 7 8 | Try: #Hier gebeuren allerlei dingen blablablabla # Eventueel zouden ze mis kunnen gaan Catch: #Hier gaat de code naartoe als er iets fout gaat. #In dit blok kun je bijvoorbeeld een foutmelding laten verschijnen als het mis gaat. Finally: #Altijd als de try wordt verlaten zal dit blok uitgevoerd worden, dus zowel wanneer er een exception palatsvindt als wanneer het goed gaat. |
| 1 2 | # start recording the stream in format h264 camera.start_recording(stream, format = 'h264') |
| 1 2 3 4 5 6 | def num_pairs(num_items): num_pairs = 0 while num_items > 0: num_items -= 1 num_pairs += num_items return num_pairs |
| 1 2 | def num_pairs(num_items): return num_items * (num_items - 1) / 2 |
| 1 2 3 | def num_pairs(num_items): """Return the number of pairs that can be drawn from a list of num_items items.""" return num_items * (num_items - 1) / 2 |
|
|
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |