420 likes | 445 Views
Sistem server yang telah dienkripsi penuh menjamin 100% keamanan data member-member kami dari pihak internal <a href="http://www.lapakpoker303.com">lapak303</a><br> maupun eksternal. Sistem dengan spesifikasi terbaik dan teknologi terbaru juga telah kami siapkan untuk Anda semua member agar dapat bermain dengan tenang dan aman tanpa perlu khawatir adanya gangguan apapun. Mohon gunakan akun andan yang sudah terdaftar dengan bijak dan manfaatkan fitur-fitur yang membantu anda selama permainan berlangsung. Congratulations kepada akun KITO yang sudah memenangkan Jackpot http://www.nagapoker2019.net senilai 25 Ribu yang bisa anda cairkan sekarang juga dan anda juga berhak mendapat kejutan menarik dari situs <a href="http://www.kartupoker2019.com">http://www.kartupoker2019.com</a><br> ini bila anda mendaftar dan mengikuti permainan dengan serius tapi juga menyenangkan. Kita bukan hanya obral janji jadi segera daftar sekarang juga dan ramaikan permainan ini sampai anda menjadi Pro player dan the Best Player dengan kekayaan yang menggiurkan. <br>
E N D
Django Web Development Tutorial SENTDEX
Chapter - 1 Django Web Development with Python Introduction Selamat Datang pengembangan web Django dengan seri tutorial Python. Django adalah framework web Python, ditujukan untuk mempercepat develop dan deploymen. Salah satu pertanyaan yang lebih umum orang adalah "framework" yang harus digunakan. Ada beberapa untuk Python, dengan Django dan Flask menjadi dua yang paling populer. Flask lebih dari apa yang kita sebut "mikro" framework web. Hal ini jauh dari "tingkat yang lebih rendah" dari Django. Hal ini memungkinkan penyesuaian dan kontrol untuk pengembang. Django jauh lebih dari higher-level framework dan memaksakan struktur set pada pengembang. Jadi, dengan Flask Anda dapat membuat sistem jalan, yang mungkin bukan yang paling efisien, tercepat, atau cara yang aman. Dengan Django, Anda sedikit lebih dibatasi, tetapi Anda akan paling mungkin melakukannya dengan cara yang terbaik. Seperti hampir semua pertanyaan orang bertanya kepada saya mengenai yang digunakan, jawabannya adalah: Cobalah beberapa, dan memilih salah satu yang Anda sukai. Pada akhirnya, Django dan Flask dapat digunakan untuk membuat situs yang sama persis! Untuk mencoba Django, Anda perlu untuk mendapatkan Django pertama (Anda juga perlu instal Python). Ini sangat sederhana: pip install Django Masalah? Lihat halaman instalasi Django. Anda juga dapat menginstal versi yang sangat spesifik. Saya akan menggunakan 1,9 untuk seri tutorial ini. Jika Anda ingin menggunakan versi yang tepat: pip install Django==1.9 Sekarang Anda siap untuk mulai. Hal ini dapat mengambil beberapa waktu untuk mencerna paradigma yang digunakan oleh Django, tapi cara kerjanya pada tingkat yang paling makro adalah Anda memiliki proyek secara keseluruhan, dan kemudian dalam proyek, Anda memiliki berbagai aplikasi, yang dapat Anda panggil, menggunakan mereka dalam satu atau bahkan beberapa proyek / website. Misalnya, Anda dapat membuat aplikasi blog yang Anda gunakan pada sekelompok website Anda untuk bagian blog mereka, ikuti langsung (Jangan mengikuti) prinsip. Proyek utama memiliki file urls.py yang menentukan URL yang mengarah ke aplikasi, dan kemudian aplikasi sendiri memiliki urls.py mereka sendiri, yang menentukan URL dari sana. Konsep ini sangat asing bagi saya pada awalnya, tapi itu benar-benar memunculkan banyak pengertian. Misalnya, urls.py proyek utama Anda akan memiliki pointer ke / blog / untuk aplikasi blog, maka aplikasi blog Anda akan memiliki arah sendiri untuk, katakanlah, / penulis / di urls.py. kerapian tentang ini, adalah di satu situs, Anda mungkin memiliki banyak hal, dan blog. Mungkin Anda menjalankan bisnis, sehingga Anda mengarahkan proyek utama Anda ke / blog /, dan kemudian penulis akan yourwebsite.com/blog/authors/. Kemudian, dengan menggunakan aplikasi yang sama persis, Anda bisa memiliki website lain yang hanya blog, di mana lokasi aplikasi untuk
aplikasi blog hanya / (indeks), tetapi definisi urls.py aplikasi tidak perlu mengubah. yourwebsite.com/authors/ akan bekerja di sini. Terlebih lagi, ini berarti Anda dapat sangat mudah menerapkan aplikasi orang lain. Umumnya ketika saya bekerja dengan framework besar seperti ini, tugas pertama saya benar-benar membuat sesuatu tampak berhasil. Sampai saat itu, saya tidak benar-benar yakin mengerti sama sekali, jadi mari kita dapatkan halaman untuk menampilkan beberapa teks untuk kita. Langkah pertama di sini adalah bagi kita untuk membuat sebuah proyek. Menavigasi melalui terminal atau command prompt ke suatu daerah di mana Anda ingin bekerja pada proyek Anda, kemudian lakukan: django-admin startproject mysite Ini akan membuat direktori bernama mysite. Dalam direktori tersebut, Anda memiliki satu lagi disebut mysite, bersama dengan file manage.py. File manage.py memungkinkan Anda dengan mudah berinteraksi dengan proyek Anda melalui baris perintah. Isi dari direktori mysite kedua berisi pengaturan Anda dan url terutama: > mysite/ - Simple container, Call whatever you want. > manage.py - Lets you interact with your project via the command line. > mysite/ - Actual project directory. > __init__.py - Tells python this is a Python package. > settings.py - Settings for the project. > urls.py - URL rules. Django docs aptly describes as your table of contents. > wsgi.py - WSGI magic begins here. Worry about this when it comes time to actually deploy to a server. Paradigma Django bahwa baik sebuah situs web adalah sebuah aplikasi, atau koleksi aplikasi dalam banyak kasus. Saat ini website kami, disebut "mysite" untuk saat ini. Sekarang kita perlu sebuah aplikasi, apa yang akan mencakup dalam tutorial berikutnya. Untuk saat ini, jalankan berikut melalui baris perintah atau terminal: python runserver manage.py. Ini menjalankan server lokal, dengan alamat di http://127.0.0.1:8000. Pesan anda akan melihat "it worked". Jika tidak, periksa kesalahan dan coba dari debug. Juga memeriksa Django menginstal dokumentasi jika Anda mengalami masalah instalasi.
CHAPTER 2 First Website Setelah Anda melakukan perintah startproject, sebuah direktori baru dibuat, disebut apa pun yang Anda namakan. Kami menyebutnya mysite. Ubah direktori ke direktori mysite Anda. Selanjutnya, kita membuat aplikasi baru untuk ini: python manage.py startApp webapp Sekarang direktori baru ada, disebut webapp. Di sini, kita melihat banyak file yang sama, dan beberapa yang baru: webapp/ migrations/ __init__.py admin.py apps.py models.py tests.py views.py Aplikasi ini memang diperlakukan sebagai paket sendiri, dengan __init__.py, bersama dengan file lainnya. Untuk saat ini, kita akan menyibukkan diri dengan views.py, dan kami benar-benar akan menambah urls.py. file lain Pertama, mari kita memodifikasi webapp / views.py: from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("<h2>HEY!</h2>") Selanjutnya, kita akan membuat file baru: webapp / urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), ] Pertama, Anda mungkin melihat ini dari. impor, periode di sini berarti kita mengimpor dari paket saat ini, itu adalah impor relatif. Selanjutnya, kita memiliki definisi urlpatterns. Ini adalah ekspresi reguler yang akan membawa apa pun jenis pengguna di, dan mencoba untuk menemukan kecocokan. Tidak tahu Regular Expressions? Memeriksa tutorial regex. ekspresi kita di sini adalah ^ $. Tanda wortel bahwa itu adalah awal dari string, kemudian $ menandai akhir. Dengan demikian, URL khusus ini akan menjadi "index," di mana akan ada apa-apa lagi di URL, seperti sebuah
homepage. Perbedaannya, bagaimanapun, adalah berkas urls.py khusus ini relatif, itu adalah lokal ke aplikasi webapp, yang sebenarnya adalah bagian dari apa yang membuat Django sangat mengesankan, dan apa yang saya referensi sebelumnya tentang berbagai file urls.py. Jadi, sekarang webapp kami memiliki penanganan url, tetapi proyek utama kami sebenarnya tidak menunjuk ke webapp sama sekali, jadi mari ke selanjutnya. Jika ke mysite / urls.py, Anda harus sudah memiliki: from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ] Kami akan meninggalkan admin , dan berbicara tentang itu nanti, tapi pada dasarnya Django sudah memiliki panel built-in kontrol admin. Kami akan menambahkan URL lain untuk link ke webapp kami. Cukup, kita bisa melakukan: from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^webapp/', include('webapp.urls')), ] Selanjutnya, kita perlu akhirnya mencakup aplikasi baru dalam aplikasi yang telah terinstal: mysite/settings.py # ...this is just a slice of code within settings.py # do not delete the other code # just add 'webapp' to the list. INSTALLED_APPS = [ 'webapp', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] Di sini, kita punya proyek utama kami menunjuk ke webapp kami, mulai / webapp /. Dengan demikian, apa yang akan terjadi selanjutnya adalah Django akan bop ke dir webapp, referensi file urls.py ada, dan terus. Dalam hal ini, / webapp / akan diperlakukan sebagai "root," jadi jika Anda
memiliki url di webapp Anda yang kosong, seperti yang kita lakukan, maka untuk sampai ke sana, Anda akan ketik di yourwebsite.com/webapp/, dan itu akan membuat Anda di sana. Pergi ke depan dan menguji itu. Kepala ke konsol Anda, pastikan Anda bekerja dalam direktori wadah utama Anda proyek (yang mengandung manage.py), dan jalankan: python manage.py runserver Berikutnya, kunjungi http://127.0.0.1:8000/webapp/. Anda harus disambut dengan teriakan Anda "HEY!" Atau, bagaimana jika Anda ingin beranda situs web Anda menjadi pesan webapp? Anda akan memodifikasi mysite / berkas urls.py yang mendikte webapp sebagai ditahan di / webapp /, untuk benar-benar akan diadakan di indeks, yang akan menjadi ekspresi reguler yang sama seperti yang biasa kami dalam webapp itu sendiri r '^ $'. Jadi, sekarang, mysite / berkas urls.py Anda terlihat seperti: from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', include('webapp.urls')), ] Jika Anda meninggalkan perintah runserver, maka perubahan harus yang sudah, pergi ke depan dan head ke "homepage," Anda yang http://127.0.0.1:8000/. Ada pesan Anda! Akhirnya, bagaimana jika Anda ingin menempatkan Anda "HEY!" terletak di URL berikut: http://127.0.0.1:8000/webapp/hey/? Ada beberapa cara untuk lolos dengan ini, tapi cara yang paling masuk akal adalah untuk memiliki link situs utama untuk webapp, maka menangani untuk / hey / dalam file urls.py webapp ini. Pertama, kita perlu memodifikasi mysite / urls.py untuk menghubungkan hanya untuk webapp: mysite/urls.py from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^webapp/', include('webapp.urls')), ] Selanjutnya, kita ingin menyertakan kami "hey" url di webapp / berkas urls.py: from django.conf.urls import url from . import views urlpatterns = [
url(r'^hey/', views.index, name='index'), ] Bagus, sekarang Anda dapat mengunjungi http://127.0.0.1:8000/webapp/hey/ untuk melihat pesan Anda. Sayangnya, webapp ini tidak akan mendapatkan jutaan pengguna dalam waktu dekat.
CHAPTER 3 Jinja Templates Sekarang kita memiliki pemahaman dasar tentang bagaimana Django bekerja, mari kita coba untuk membangun jenis yang sangat dasar dari situs. Untuk ini, kita akan membangun sebuah website pribadi yang sangat sederhana yang pada dasarnya memberikan semacam "tentang saya," bersama dengan sebuah blog. Sesederhana ini mungkin terdengar, itu benar-benar akan membiarkan kita latihan beberapa prinsip Django, yang berakhir dengan memulai sistem manajemen konten, seperti blog. Kami juga akan bisa menjelajahi sedikit tentang desain. Pada saat ini, jika kita mencoba untuk mengunjungi situs kami http://127.0.0.1:8000/, kita mendapatkan 404, karena kita tidak ada yang sesuai untuk itu. Mari kita pergi ke depan dan membuat aplikasi baru, menyebutnya personal, karena ini adalah situs pribadi kita. python manage.py startApp personal Jadi kami telah menambahkan aplikasi, dan kami tentu saja sepenuhnya berniat untuk menggunakannya, jadi apa yang perlu kita lakukan? Memasang! Menuju ke mysite / settings.py, cari INSTALLED_APPS INSTALLED_APPS = [ 'personal', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] Anda dapat pergi ke depan dan hanya menghapus aplikasi webapp kami, itu hanya untuk menunjukkan sederhana. Selanjutnya, kita harus benar-benar menunjuk ke aplikasi baru terbuka ini. buka mysite / urls.py: from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', include('personal.urls')), ] Di sini, kami menambahkan pola baru url '^ $', yang hanya cukup mudah berarti pola yang dimulai, dan berakhir, dengan apa-apa, maka "index" atau "rumah" halaman. Hanya satu masalah, file ini tidak ada! Oke, mari kita bop di atas untuk personal / urls.py:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index')] Ini terlihat sangat akrab. Hal ini identik dengan webapp lama kita / urls.py. Sekali lagi, pola ini hanya dimulai dan berakhir dengan apa-apa. Jika itu yang terjadi, boom, kita kembali ke views.index ... yang tidak cukup memiliki apa-apa. Oke, mari kita melakukan itu. Head ke personal / views.py from django.shortcuts import render def index(request): return render(request, 'personal/home.html') Ini sedikit baru. Di sini, kita "membuat," respon http dari sebelumnya. Render mengambil parameter permintaan pertama, maka template untuk membuat, maka kamus opsional variabel melewati ke template. Untuk saat ini, kami tetap sederhana. Kami hanya ingin memuat template home.html. Tentu saja, bagaimanapun, belum ada. Oke, mari kita lakukan, tapi pertama mari kita jelaskan keajaiban template dan direktori relatif lokal lainnya. Dengan template, dan kemudian file static, Anda akan menempatkan template Anda dalam direktori template, tetapi masing-masing aplikasi akan memiliki template sendiri. Yang mengatakan, seluruh situs itu sendiri mungkin memiliki template juga, dan template ini sebenarnya secara bersamaan digunakan. Misal, pada umumnya, website terlihat sangat mirip di berbagai halaman mereka, karena mereka mengikuti template, biasanya disebut sebagai header. header berisi hal-hal seperti navigasi bar, mungkin gambar spanduk, dan sebagainya. Header ini tetap sama, dan harus terkandung dalam satu file utama. Bayangkan jika Anda memiliki sebuah website dengan 100 halaman yang unik, masing- masing berisi kode untuk bar navigasi, dan Anda ingin mengubah tombol di atasnya. Anda harus mengedit 100 file, dan itu sangat membosankan! Dengan demikian, kita memiliki template, seperti header. Yang mengatakan, dengan Django, Anda akan memiliki header sebagai template, dan template kemudian lain yang "memperpanjang" header ini dan bertindak sebagai bagian. Dengan demikian, Anda akan memiliki main-website template, dan kemudian template khusus aplikasi. Mereka tidak mungkin cukup disimpan di tempat yang sama. Masukkan Django sihir. Ternyata, Anda hanya dapat memiliki beberapa direktori template yang, satu per aplikasi. Kemudian, pada template Anda yang sebenarnya, Anda dapat hanya referensi path relatif, dan Django hanya akan mencari tahu. Bahkan jika Anda menggunakan salah satu template dari satu aplikasi, dan template lain dari aplikasi lain. Serius, itu sihir, tidak ada penjelasan lain. Hal yang sama berlaku untuk file static, yang akan Anda lihat cukup cepat. Baiklah, jadi sekarang kita mengerti untuk mengharapkan keajaiban ini, kami tidak akan begitu terkejut ketika itu terjadi. Pertama, kita akan membuat template dir untuk situs pribadi: personal / template. Sejak website kami memang terutama difokuskan pada aplikasi pribadi, kita akan pergi ke depan dan berisi file header di sini. Sekarang, kita * bisa * pergi dengan menempatkan template tepat di dalam sini, tapi, jika kita ingin mengambil bagian dalam sihir Django dengan direktori relatif, kita perlu benar-benar membuat direktori lain, yang disebut personal, pada dasarnya sama dengan nama aplikasi kita. Anda akan
melakukan hal ini dalam setiap kasus. Alasan mengapa bekerja tanpa melindungi satu langkah lebih lanjut dengan nama aplikasi yang Django cari template dengan nama. Anda mungkin memiliki beberapa template header, mungkin beberapa "home" template untuk berbagai "home" dari aplikasi, dan sebagainya. Untuk memastikan tidak sengaja mengarahkan hal yang bertentangan, Anda menambahkan nama aplikasi, jadi itu adalah bagian dari referensi yang dinamis. Dengan demikian, jalan mulai dari proyek root, mysite, kita memiliki direktori: mysite / personal / template / personal kita siap untuk beberapa template. Pertama, kita akan ciptakan sebuah file header. Sesuatu yang super sederhana untuk saat ini: <!DOCTYPE html> <html lang="en"> <head> <title>Harrison Kinsley</title> <meta charset="utf-8" /> </head> <body class="body" style="background-color:#f6f6f6"> <div> {% block content %} {% endblock %} </div> </body> </html> Jika Anda memerlukan penjelasan tentang html di sini, check out video. Hal penting bit Django terkait adalah: {% block content %} {% endblock %} ... Kecuali bukan django! Ini tidak benar-benar Python. Sebuah Jinja telah muncul, Jinja2 khusus. Jinja adalah template mesin Python, ditujukan untuk membantu Anda melakukan hal-hal yang dinamis dengan HTML seperti lewat variabel, menjalankan logika sederhana, dan banyak lagi! Dengan Jinja, Anda akan melihat kami menggunakan {% % }, ini menunjukkan logika. Untuk variabel, Anda akan melihat {% {%}}. Penggunaan konten blok dan endlock adalah salah satu dari dua cara utama menggabungkan template dalam template. Metode ini umumnya digunakan untuk kombinasi header / Template, tapi ada yang lain Anda bisa menggunakan yang saya akan tunjukkan nanti. Selanjutnya, mari kita buat file HTML lain yang akan berfungsi sebagai apa pun yang akan mengisi konten blok ini. Jika Anda ingat dari 5 tahun yang lalu, niat kami adalah untuk melayani home.html, dan sekarang kami akhirnya memiliki kesempatan!
personal/templates/personal/home.html {% extends "personal/header.html" %} {% block content %} <p>Hey! Welcome to my website! Well, I wasn't expecting guests. Um, my name is Harrison. I am a programmer.</p> {% endblock %} Banyak dari kode ini sebenarnya hanya logika Jinja, hanya dengan kalimat sederhana yang sebenarnya apa yang akan dihasilkan. Ini hanya contoh yang sangat sederhana, biasanya akan ada lagi di sini. Apa yang akan berakhir terjadi, bagaimanapun, adalah, ketika kita katakan Django untuk membuka file home.html ini, akan membaca bahwa file ini "meluas" header.html, dan segala sesuatu di isi blok akan ditempatkan di dalam logika konten blok bahwa kita dibangun ke file header.html. Setelah banyak pekerjaan, kita akhirnya membaca untuk melihat hasil kami! Pergi ke depan dan menjalankan server, dan kunjungi situs http://127.0.0.1:8000/ Anda. Anda harus mendapatkan apa yang Anda masukkan ke dalam file home.html. Jika Anda melihat sumber, Anda akan melihat bahwa kode lain yang ada, hanya saja file header kita sebenarnya cukup membosankan pada saat ini. Cukup banyak seperti meluas fungsi, Anda juga bisa "termasuk" html. Mana meluas hanya meluas halaman tertentu, biasanya seperti header, Anda juga dapat menggunakan termasuk untuk memasukkan sedikit HTML dinamis. Contoh dari daerah di mana saya telah digunakan termasuk adalah dengan komentar kotak, iklan, dan konten dinamis lainnya. Saya memiliki termasuk laporan pada banyak halaman. Setiap kali saya ingin memodifikasi kode pada semua halaman untuk elemen-elemen, saya hanya perlu mengedit file yang disertakan sekali untuk mempengaruhi semua file. Mari kita buat sebuah contoh sederhana. Pertama, di mysite / template / personal / includes / htmlsnippet.html (Anda belum memiliki termasuk direktori di sini, membuat satu). {% block content %} <p>Whoa, check me out, I am included!</p> {% endblock %} Seperti yang Anda lihat, kita menggunakan tag logika konten blok. Ini adalah cuplikan kita mungkin ingin memasukkan tempat lain, jadi mari kita mencobanya di homepage: mysite / personal / template / personal / home.html {% extends "personal/header.html" %} {% block content %} <p>Hey! Welcome to my website! Well, I wasn't expecting guests. Um, my name is Harrison. I am a programmer.</p> {% include 'personal/includes/htmlsnippet.html' %} {% endblock %} Sekarang, refresh homepage, dan Anda harus memiliki teks termasuk baru juga! Seperti yang dapat Anda bayangkan, ini termasuk cuplikan akan atau bisa menjadi jauh lebih kompleks, dan termasuk di banyak template lain.
CHAPTER 4 Design with HTML/CSS Dalam tutorial ini, kita akan membumbui halaman mysite sedikit. Saat ini, hompage kami seperti: Not bad, tapi kami bisa berbuat lebih baik. Kita akan menggunakan Bootstrap, yang merupakan HTML populer / CSS dan beberapa paket javascript yang sangat membantu orang-orang yang butuh desain. Bootstrap tidak akan memperbaiki Anda sepenuhnya, tetapi setidaknya dapat mengulurkan tangan membantu. Website ini dibangun di atas Bootstrap, dan website saya yang lain, seperti Sentdex.com. head ke situs Bootstrap dan mendownloadnya. Cari dan catatan untuk diri sendiri Bootstrap CDN (Content Delivery Network = jaringan pengiriman konten). Saya akan menunjukkan kepada Anda menggunakan Bootstrap lokal sehingga Anda juga dapat belajar tentang referensi file static. Kemudian, Anda dapat memilih untuk menggunakan CDN sebaliknya, sebagai CDN dapat mengirimkan data pada kecepatan lebih cepat dari server Anda, karena berada di beberapa lokasi dan melayani dari lokasi yang paling dekat dengan end-user. Setelah download, ekstrak ke folder dist, buka, kemungkinan lain, dan kemudian menemukan css, font, dan js direktori. Head ke mysite / personal, membuat sebuah direktori baru bernama static, dan kemudian lain yang disebut personal dalam satu itu, dan menempatkan direktori Bootstrap ada. path harus mysite \ personal \ static \ personal, mulai dari mysite root. Anda bisa lolos dengan menempatkan ini di salah satu aplikasi yang telah diinstal. Karena site personal adalah "aplikasi utama," Saya memilih untuk menempatkan file-file ini di sini. CSS akan menentukan banyak tentang apa situs Anda terlihat seperti, aplikasi yang paling integral jadi tuan rumah. Setidaknya bagi saya, itu sudah ada, tapi sekarang bahwa Anda memiliki file static, Anda memastikan ada pengaturan bagi mereka di mysite / settings.py Anda: STATIC_URL = '/static/' Hal ini di bagian paling bawah dalam kasus saya. Ini hanya cukup mencari file static berada di direktori static aplikasi terinstal, seperti Django sudah tahu untuk mencari template di direktori template yang. Sekarang kepala ke pribadi / template / personal / header.html template Anda. Kita akan memanggil file CSS baru kita ke dalam tindakan. <!DOCTYPE html> <html lang="en"> <head> <title>Harrison Kinsley</title> <meta charset="utf-8" /> {% load staticfiles %} 'css/bootstrap.min.css' %}" type = "text/css"/> <link rel="stylesheet" href="{% static
</head> <body class="body" style="background-color:#f6f6f6"> <div> {% block content %} {% endblock %} </div> </body> </html> Penambahan baru di sini: {% load staticfiles %} 'personal/css/bootstrap.min.css' %}" type = "text/css"/> <link rel="stylesheet" href="{% static Kami menggunakan StaticFiles beban perintah untuk memuat semua file static yang tersedia. Selanjutnya, kita specifiy jalan dengan yang kita inginkan dalam kasus ini untuk referensi untuk stylesheet kami. Direktori static mulai dengan / static / dan kemudian kita perlu menentukan sisa perjalanan. Bagi kami, sisa jalan ke file bootstrap.min.css adalah pribadi / css / bootstrap.min.css. Hal ini penting untuk dicatat di sini bahwa kita dapat menggunakan referensi yang identik ini dari aplikasi lain, Django akan terlihat di semua / static / direktori dalam setiap aplikasi yang terpasang untuk jalan ini. Baiklah, besar, pergi ke depan dan melakukan: python runserver manage.py, menyegarkan kembali beranda, dan Anda setidaknya harus melihat font yang sedikit berbeda. Tidak menang penghargaan untuk website ini, tapi mari kita coba untuk memperbaikinya sedikit. File utama kami ingin fokus pada, setidaknya untuk saat ini, untuk tampilan umum dan nuansa situs kami adalah mysite / pribadi / template / pribadi / header.html. Terbuka yang cadangan, dan tempat di sana sesuatu seperti: <!DOCTYPE html> <html lang="en"> <head> <title>Harrison Kinsley</title> <meta charset="utf-8" /> {% load staticfiles %} 'personal/css/bootstrap.min.css' %}" type = "text/css"/> <meta name="viewport" content = "width=device-width, initial-scale=1.0"> <style type="text/css"> <link rel="stylesheet" href="{% static
html, body { height:100% } </style> </head> <body class="body" style="background-color:#f6f6f6"> <div class="container-fluid" style="min-height:95%; "> <div class="row"> <div class="col-sm-2"> <br> <center> <img src="{% static 'personal/img/profile.jpg' %}" class="responsive-img" style='max- height:100px;' alt="face"> </center> </div> <div class="col-sm-10"> <br> <center> <h3>Programming, Teaching, Entrepreneurship</h3> </center> </div> </div><hr> <div class="row"> <div class="col-sm-2"> <br> <br> <!-- Great, til you resize. --> <!--<div class="well bs-sidebar affix" id="sidebar" style="background-color:#fff">--> <div class="well bs-sidebar" id="sidebar" style="background-color:#fff"> <ul class="nav nav-pills nav-stacked"> <li><a href='/'>Home</a></li> <li><a href='/blog/'>Blog</a></li> <li><a href='/contact/'>Contact</a></li> </ul> </div> <!--well bs-sidebar affix--> </div> <!--col-sm-2--> <div class="col-sm-10"> <div class='container-fluid'>
<br><br> {% block content %} {% endblock %} </div> </div> </div> </div> <footer> <div class="container-fluid" style='margin- left:15px'> <p><a href="#" target="blank">Contact</a> | <a href="#" target="blank">LinkedIn</a> | <a href="#" target="blank">Twitter</a> target="blank">Google+</a></p> </div> </footer> </body> | <a href="#" </html> Oke, jadi itu cukup perubahan dari sebelumnya! Mari kita jatuhkan itu sedikit: <head> <title>Harrison Kinsley</title> <meta charset="utf-8" /> {% load staticfiles %} 'personal/css/bootstrap.min.css' %}" type = "text/css"/> <meta name="viewport" content = "width=device-width, initial-scale=1.0"> <style type="text/css"> html, body { height:100% } </style> </head> <link rel="stylesheet" href="{% static Head hanya berisi beberapa meta info untuk sebagian besar. Satu-satunya perubahan dari sebelumnya adalah dimasukkannya beberapa CSS lebih. CSS ini hanya menetapkan untuk menjadi kasus yang html dan tubuh kita elemen akan mengambil 100% dari website. Kami juga menambahkan <meta name = "viewport" content = "width = device-width, awal skala = 1.0">, yang terutama saran oleh Bootstrap. Selanjutnya, kita mulai mendefinisikan div pada tag tubuh sebagai wadah dengan ketinggian minimal 95% dari halaman. Kami melakukan ini karena kami mungkin memiliki saat-saat halaman lebih panjang dari 100% dari halaman (maka perlu scrollbar), tapi kami
juga tidak ingin footer kami di bagian atas halaman. Selanjutnya, kita gunakan di "baris" elemen. Ini adalah Bootstrap. Jadi yang divs kontainer-cairan kami. Untuk elemen baris, periksa: Bootstrap Grids. Selanjutnya, kita menggunakan Bootstrap Nav dalam kombinasi dengan baik dan sidebar. Saya termasuk contoh dari sidebar yang terintegrasi, di mana Anda dapat menggulir dan sidebar tetap di tempat. Anda bisa memberi komentar pada cara kita membangun div, tanda komentar yang satu, dan melihat sendiri. Masalahnya muncul ketika Anda pergi untuk mengubah ukuran halaman untuk sesuatu yang lebih seperti ukuran ponsel. Salah satu hal besar mengenai Bootstrap adalah sangat responsif, yang merupakan sesuatu yang Anda biasanya akan harus kode. Yang mengatakan, hal yang masih bisa salah, dan Anda harus selalu menguji kode Anda pada berbagai ukuran perangkat. Jika Anda ingin sidebar yang akan ditempelkan, memeriksa sesuatu seperti contoh sidebar ini. Saran terbaik saya adalah untuk menghabiskan waktu membaca dokumentasi Bootstrap. Sebelum saya memulai sebuah proyek, saya biasanya hanya menarik dokumentasi, buka setiap kategori utama (CSS, JavaScript, dan Komponen), dan gulir melalui mereka. Saya tidak membaca setiap kata, saya hanya mendapatkan penyegaran tentang apa yang tersedia. Bootstrap juga menjadi tuan rumah beberapa contoh seluruh halaman untuk contoh desain dan ide-ide. Kembali ke template kita saat ini, ada satu hal lagi yang diperlukan bahwa Anda mungkin tidak memiliki. template ini panggilan untuk profile.jpg image with the line <img src="{% static 'personal/img/profile.jpg' %}" class="responsive-img" style='max-height:100px;' alt="face">. Anda akan ingin mendapatkan gambar dari diri sendiri, mungkin logo Python, atau sesuatu yang lain untuk menempatkan di sini. Anda dapat juga hanya tidak memiliki gambaran sama sekali dan tidak memasukkan apa pun. Hasilnya harus sesuatu seperti:
Kami juga dapat squish layar sedikit lebih seperti ponsel vertikal, dan kita akan melihat langkah nav kami ke atas, seperti: Oke, jadi kami masih belum memenangkan penghargaan untuk desain kami, tapi ini lebih baik dari sebelumnya. Saya sangat mendorong Anda untuk terus bekerja pada header untuk terus meningkatkan itu. Karena ini adalah tutorial Django, kita akan meninggalkannya seperti itu dan melanjutkan. Dalam tutorial berikutnya, kita akan membuat halaman kontak kami, menciptakan itu sebagai halaman generik dan melewati data untuk tubuh blok sebagai variabel dari Python ke template HTML.
CHAPTER 5 Jinja Variables Dalam tutorial ini, kita akan menutupi lewat variabel dari Python ke template HTML kita. Untuk mencoba ini, kita akan membangun "kontak" halaman kami. Menambahkan halaman baru, dari aplikasi pribadi, apa yang kita tertentu untuk butuhkan? Kita akan membutuhkan pandangan, dan pola url untuk kembali pandangan itu. Mari kita lihat personal / views.py pertama: from django.shortcuts import render from django.http import HttpResponse def index(request): return render(request, 'personal/home.html') def contact(request): return render(request, 'personal/basic.html',{'content':['If you would like to contact me.','hskinsley@gmail.com']}) me, please email Di sini, kita render template, dan juga melewati kamus. Kemudian dapat referensi 'konten' dalam template kita dengan referensi {{konten}}, misalnya. Ini akan mengembalikan nilai ['Jika Anda ingin menghubungi saya, silakan email saya.', 'Hskinsley@gmail.com'] dalam template kami untuk bekerja dengan. Berbicara tentang template yang, mari kita buat. personal/templates/personal/basic.html {% extends "personal/header.html" %} {% block content %} {% for c in content%} <p>{{c}}</p> {% endfor %} {% endblock %} Template basic.html ini bertujuan untuk menghasilkan pesan berbasis teks sederhana dalam template. Dengan demikian, kita benar-benar dapat menggunakannya untuk berbagai macam halaman, itu hanya terjadi menjadi halaman kontak dalam kasus ini. Kami mengambil konten, yang daftar, dan kemudian kita menggunakan Jinja2 untuk loop untuk iterate melalui daftar. Kami punya pandangan kami lakukan, sekarang kita perlu bahwa pola URL. Bagaimana kita harus melakukannya? Adalah kontak bagian dari aplikasi umum, atau terutama webapp pribadi? Setidaknya dalam kasus ini, kontak pribadi, jadi saya akan mengatakan itu milik dalam aplikasi itu, tapi itu benar-benar bisa pergi di kedua tempat menurut pendapat saya. Melakukan hal ini juga akan membuat masalah muncul bagi kita untuk belajar dari. Jadi, mari kita tambahkan pola URL untuk
personal/urls.py : from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^contact/', views.contact, name='contact'), ] Kita dapat menjalankan server, dan mencoba untuk mengunjungi, bagaimanapun, tidak bekerja! Apa yang menyebabkannya? Nah, logika kita untuk pola URL kami telah berubah sedikit fundamental. Memeriksa kesalahan, kita bisa melihat apa yang Django berusaha untuk lakukan: Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order: ^admin/ ^$ The current URL, contact, didn't match any of these. Daftar ini terlihat sedikit akrab, itu yang kami gunakan pada mysite / urls.py kami. Sepertinya itu tidak repot-repot membaca personal / urls.py file kita, bagaimana kasar. Sebenarnya, itu hanya melakukan apa yang kita diberitahu untuk melakukan. Bahkan, bahkan telah mencoba untuk berbicara! Periksa terminal Anda, dan Anda akan melihat peringatan tentang pola url. Tidak hanya itu, tapi ia memberitahu Anda untuk menghapus tanda dolar untuk memperbaikinya! Terima kasih Django! Mari kita coba. Sekarang kita benar-benar menggunakan ini ^ $ pola di dua lokasi, tapi kami harus bisa logis mengetahui masalah ini disebabkan oleh utama mysite / berkas urls.py, karena pada dasarnya memaksa bahwa satu-satunya cara untuk sampai ke aplikasi pribadi adalah untuk tidak memiliki teks, sehingga / contact / tidak bisa hanya sampai di sana. Mari kita menghapus tanda dolar dari mysite/urls.py: from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include('personal.urls')), ] Sekarang jalankan server, dan coba lagi. Anda harus sukses ketika mengunjungi http://127.0.0.1:8000/contact/ Besar. Anda dapat benar-benar cukup banyak melakukan apa-apa dari titik ini dengan coding berbagai fungsi sendiri, seperti mengakses database untuk mengambil data dan mengisi kamus seperti itu. Yang mengatakan, Django sebenarnya memiliki lebih banyak untuk menawarkan kita! Dalam tutorial berikutnya, kita akan membahas bagaimana untuk mulai membangun sebuah blog, dan benar-benar mulai untuk memamerkan keajaiban Django.
CHAPTER 6 Beginning a Blog Dalam pengembangan web ini keenam Django dengan Python tutorial, kita akan bekerja dengan model di Django. Rencana kami adalah untuk menambahkan elemen terakhir dari website kami: blog. Sejauh ini, kami telah bekerja dengan pandangan dan controller, tapi belum benar-benar melakukan apa-apa dengan model. Pertama, apa itu model? Model berisi "meta data" mengenai data aplikasi Anda. Umumnya, model ini digunakan untuk menggambarkan unsur-unsur dalam database Anda, tetapi mereka dapat dibangun untuk menjadi jauh lebih dari itu. Kedua, kita tahu bahwa kita ingin membuat sebuah blog. Apakah blog ini bagian dari website "personal" kami, atau akan lebih masuk akal untuk menjadi aplikasi sendiri? Ini bisa menjadi bagian dari aplikasi personal kita, tapi itu benar-benar harus menjadi sendiri sepenuhnya. Plus, kemungkinan besar, kita akan ingin memasukkan sebuah blog di aplikasi lain, jadi mari kita buat aplikasi baru: python manage.py startApp blog. Kami baru saja menambahkan aplikasi baru. Apa hal pertama yang harus kita lakukan? Benar, menginstalnya! mysite/settings.py (just a portion of it) INSTALLED_APPS = [ 'personal', 'blog', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] Selanjutnya, kita perlu jalan ke blog. / Blog / tampaknya seperti jalan yang masuk akal untuk memulai dengan, sehingga di mysite/urls.py: from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include('personal.urls')), url(r'^blog/', include('blog.urls')), ]
Jika kita akan pergi tentang termasuk blog.urls, saya kira kita lebih baik membuatnya, tapi, sebenarnya, pertama kita akan membuat models.py ! from django.db import models class Post(models.Model): title = models.CharField(max_length = 140) body = models.TextField() date = models.DateTimeField() def __str__(self): return self.title Setiap kelas di sini pada dasarnya adalah tabel database. Masing-masing variabel adalah kolom tabel, dan kemudian datatype dan mungkin beberapa atribut lebih lanjut jika Anda suka, seperti max_length dan sebagainya. Jika Anda ingin referensi benda-benda dan mendapatkan sesuatu kembali disamping itu adalah Post atau Kategori objek, maka Anda perlu menentukan metode __str__. Jika Anda menggunakan Python 2.7, malu pada Anda! ... Tetapi Anda perlu melakukan __unicode__ bukan __str__. File models.py ini lurus ke depan, terutama setelah Anda tahu semua tipe data yang mungkin dan semacamnya. Check out Django Docs untuk Fields Model, Anda memiliki banyak pilihan. Setelah kita mendefinisikan model kita, kita siap untuk menentukan blog / urls.py file kita, mengatur pandangan, dan pergi hidup, yang adalah apa yang akan kita lakukan dalam tutorial berikutnya.
CHAPTER 7 Views and Templates Setelah kita mendefinisikan model kita, kita siap untuk menentukan blog / urls.py file kita, buat template yang kita butuhkan dan kemudian kami akan dilakukan, kan ?! Nah, secara tradisional, kita perlu memodifikasi blog / views.py sebelum dilakukan, tapi tidak, kita akan menggunakan beberapa sihir Django lebih lanjut dan melewatkan bagian yang sepenuhnya dengan beberapa pandangan generik. Dengan demikian, blog/urls.py: from django.conf.urls import url, include from django.views.generic import ListView, DetailView from blog.models import Post urlpatterns = [ url(r'^$', ListView.as_view( queryset=Post.objects.all().or der_by("-date")[:25], template_name="blog/blog.html" )), ] Di sini, kita memanfaatkan ListView, yang digunakan terutama untuk halaman yang menampilkan daftar sesuatu kepada pengguna. Dalam kasus kami, daftar ini akan menjadi 25 tulisan blog diurutkan berdasarkan tanggal, turun (maka tanda -). Daripada menulis pernyataan SQL khusus, kami hanya referensi model kami. Karena kita memiliki database backend dipilih dalam pengaturan kami, Django tahu bagaimana membangun query di latar belakang. Selanjutnya, kita perlu halaman blog HTML, yang telah kami sebut blog/templates/blog/blog.html as per the template_name in the blog/urls.py file: {% extends "personal/header.html" %} {% block content %} {% for post in object_list %} <h5>{{ post.date|date:"Y-m-d" }}<a href="/blog/ {{post.id}}"> {{ post.title }}</a></h5> {% endfor %} {% endblock %} karena itu daftar, kita akan iterate melalui itu. Kami akan menampilkan post.date, di Y-m-d fashion. Kami kemudian tentukan URL dinamis untuk blog tertentu itu sendiri sehingga pengguna bisa klik link untuk kepala di sini. url akan menyebabkan / blog / <postid>, dan teks untuk URL akan menjadi judul blog. Kami dapat referensi salah satu elemen kami telah didefinisikan dalam file blog / models.py.
CHAPTER 8 Database migrations Ingat bagaimana ketika Anda membuat aplikasi baru, hal pertama yang perlu Anda lakukan adalah menginstalnya? Setiap kali Anda menentukan model baru, Anda ingin untuk bermigrasi. Jika Anda sudah familiar dengan versi Django, perintah syncdb lama sudah ditinggalkan. Saat ini, pertama Anda akan melakukan python manage.py makemigrations Output: Migrations for 'blog': 0001_initial.py - Create model Category - Create model Post Perintah makemigrations ini memberitahu Django yang telah Anda membuat beberapa perubahan model, dan Anda ingin menyimpannya sebagai migrasi. Migrasi digunakan setiap kali Anda ingin Django untuk mengenali perubahan pada model dan skema database. Menambahkan data ke tabel database yang ada, misalnya, bukanlah sesuatu yang perlu migrasi, mengubah struktur tabel tersebut (dengan mengubah model), akan membutuhkan migrasi. Dengan perintah di atas, Anda sekarang akan memiliki direktori blog / migrasi, mengandung migrasi yang diusulkan. Anda juga dapat memberitahu Django Anda ingin migrasi hanya aplikasi tertentu, seperti: python manage.py makemigrations blog Setelah Anda membuat migrasi, tidak ada yang benar-benar terjadi belum. Anda dapat menjalankan bermigrasi, tapi ada satu cek lebih Anda dapat membuat: python manage.py sqlmigrate blog 0001 ini akan menampilkan SQL diusulkan yang akan dijalankan untuk Anda dengan Django ketika Anda bermigrasi. Ini adalah ide yang baik untuk hanya membacanya. Misalnya, saya adalah:
Jika semua terlihat baik, maka Anda akan melakukan python manage.py bermigrasi. Ini benar-benar akan melakukan migrasi. Jika ini adalah pertama kalinya Anda melakukan hal ini, Anda akan melihat sedikit telah bermigrasi: Sebagian besar migrasi ini sebenarnya untuk default Django kode dalam aplikasi kita, banyak yang sesuai dengan halaman admin bahwa kita belum melihat, tapi beberapa yang memang model yang blog kita. Di belakang layar, Django telah benar-benar membuat tabel SQL kami untuk kami. Oke, mari kita lakukan python manage.py runserver dan melihat apakah kita dapat memuat //127.0.0.1:8000/blog/. Yang harus memuat, tapi tidak ada di sini. Tidak mengherankan, kami belum menulis apapun di blog kami! Itulah yang akan kita bahas pada tutorial berikutnya.
CHAPTER 9 Admin control panel Dalam pengembangan web ini 9 Django dengan Python tutorial, kita akan menutupi halaman admin, bersama dengan menambahkan beberapa posting blog untuk aplikasi kita. Hanya bila Anda pikir Anda telah melihat sebagian besar keajaiban backend yang Django ditawarkan, masih ada lagi! Django admin situs / aplikasi ini cukup luar biasa. Ini adalah Control Panel Admin, dan itu sudah dilakukan. Sama seperti Django menangani pekerjaan database Anda dengan models.py, halaman Admin akan bekerja sangat banyak dengan cara yang sama. Untuk mengakses halaman admin, Anda kunjungi / admin /, dengan asumsi aplikasi admin memang diinstal: mysite/settings.py INSTALLED_APPS = [ 'personal', 'blog', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] Secara default, aplikasi admin terinstal, adalah 'django.contrib.admin' line. Jadi Anda kepala ke admin hanya untuk menemukan Anda perlu login, dan Anda tidak memiliki pengguna. Mari kita membuat satu. Kepala ke terminal Anda / cmd.exe dan melakukan: python manage.py createsuperuser. Nama pengguna, memberikan email, dan mengatur sandi. Sekarang, menjalankan server Anda python manage.py runserver selanjutnya //localhost:8000/admin/, dan Anda akan melihat sesuatu seperti:
Segera, Anda memiliki manajemen Grup dan Pengguna. Salah satu pengguna di sini adalah Anda, admin, saat ini hanya pengguna. Klik pada pengguna, kemudian klik pada nama pengguna, dan inilah satu ton informasi untuk Anda. Anda dapat mengatur segala macam hal, seperti status pengguna umum, "staf" status, yang memungkinkan orang log ke admin, dan status superuser, yang memberikan pengguna semua hak dasarnya. Kemudian Anda dapat mulai memberikan izin dan kelompok jika Anda memiliki mereka. Untuk membuat grup, kembali ke halaman admin utama, klik kelompok, dan membuat satu. Sekarang, ini keren, tapi kami ingin lebih! Kami ingin mengelola posting melalui GUI ini, kami ingin Pony! Anda tidak bisa memiliki kuda poni, tapi Anda dapat mengelola blog Anda melalui admin, dan itu super mudah. Buat blog/admin.py, dan di dalamnya dimasukkan: from django.contrib import admin from blog.models import Post admin.site.register(Post) Di sini, kita mengimpor admin, model Post, dan kemudian kita mendaftarkan model Post. Sederhana seperti itu. Menyimpan, dan kemudian runserver lagi jika tidak sudah berjalan, dan kembali ke //127.0.0.1:8000/admin/, apa yang Anda punya adalah lebih baik dari kuda poni!
Anda memiliki bagian baru untuk bermain admin dengan, Blog. Klik pada tulisan, tidak ada di sini tentu saja. Klik add, dan apa yang Anda tahu, Anda memiliki bentuk untuk menambah pos. Django membaca file models.py Anda tahu bagaimana struktur bentuk. Pergi ke depan dan menambahkan sesuatu di sini. Perhatikan bahwa untuk tanggal dan waktu, ada "sekarang" tombol untuk membuat hidup mudah. Cukup keren. Menyimpan, dan Django berjalan ke depan dan menangani query backend SQL untuk menempatkan info ini dalam tabel database Anda. Sekarang, kepala ke //127.0.0.1:8000/blog/, dan Anda memiliki entri di sini! Mengagumkan. Pergi ke depan dan menambahkan mungkin 2 lebih entri, dan sekarang //127.0.0.1:8000/blog/ akan terlihat seperti: Dalam kegembiraan kami, kami mengklik salah satu judul blog, kami tidak bisa membantu, kan? Ternyata itu tidak bekerja! Kami mendapatkan 404. Pada tutorial berikutnya, kami akan memperbaiki hal ini, membungkus fungsi awal blog.
CHAPTER 10 Finishing blog Dalam pengembangan web ini 10 Django dengan Python tutorial, kita akan menutupi menciptakan URL yang lebih dinamis. Dalam kasus kami, kami harus memiliki URL penanganan untuk URL yang memiliki sesuatu seperti / blog / 2 /, di mana 2 sesuai dengan posting blog 2. Seperti yang bisa Anda tebak, Django melihat ini, dan telah Anda tutup. Dalam kasus kami, dan dalam banyak kasus, 2 adalah Primary Key tabel. Kunci utama adalah pengenal unik per tabel dalam database, tidak ada entri lain harus memiliki kunci primer sama dengan yang lain. Karena itu, memiliki Primary Key untuk membuat cara mudah untuk pencarian elemen dan praktek umum. Karena itu, Django telah membangun premis ini di cukup mendalam. Mari kita check it out. Pertama, kita akan mengunjungi blog/urls.py file kita, menciptakan url untuk blog masing-masing: from django.conf.urls import url, include from django.views.generic import ListView, DetailView from blog.models import Post urlpatterns = [ url(r'^$', ListView.as_view( queryset=Post.objects.all().or der_by("-date")[:25], template_name="blog/blog.html" )), url(r'^(?P<pk>\d+)$', DetailView.as_view( model = Post, template_name="blog/post.html" )), ] Pertama, kita melihat pola URL baru kami sedikit lebih kompleks, mari kita istirahat ekspresi reguler bawah ini: r '^ $ (P <pk> \ d +?)'. Ingat bahwa mysite / urls.py kami sudah mulai kita off dengan mengharuskan url untuk mulai dengan / blog / sebelum sisa URL yang berkonsultasi di sini. Bagian pertama dari pola baru ini kita lihat adalah tanda kurung. Kurung dalam ekspresi reguler menunjukkan bagian yang tepat kami ingin fokus pada. Dalam kasus kami, itu semuanya setelah awal, dan sampai akhir. Pertimbangkan nanti bahwa Anda mungkin memiliki pola lain yang serupa dengan yang satu ini. Untuk saat ini, yang satu ini akan bekerja, tapi setiap kali Anda menambahkan pola-pola baru, menganggap bahwa yang lain mungkin termasuk itu. kurung berarti kita hanya akan bekerja dengan apa yang kita miliki di sini, bukan sesuatu yang serupa. Selanjutnya, kita lihat ini? P. Ini menunjukkan sekelompok menangkap disebutkan dalam kalimat biasa, untuk dokumentasi lebih
lanjut tentang ini, lihat Django Dinamakan Grup. Sederhananya, kelompok ini akan sesuai dengan permintaan, di mana tanpa kelompok bernama permintaan hanya akan berisi daftar argumen URL di terbaik, tetapi mereka tidak akan dicap (bernama). Dengan itu, Django menyimpan nilai <pk> sebagai pk = nilai, nilai apa pun itu. Hal ini membuat URL Anda lebih eksplisit. Karena kita menggunakan ekspresi reguler, kami ingin memastikan bahwa kami adalah sebagai eksplisit mungkin untuk menghindari tumpang tindih pertandingan. Melanjutkan dengan pola URL ekspresi reguler kami: r '^ $ (P <pk> \ d +?), Kita memiliki <pk>, yang kita hanya menjelaskan akan menjadi nama variabel untuk apa pun di tempat ini. Dalam kasus kami, ketika kita melakukan / blog / 5 /, var pk akan = 5. Selanjutnya, untuk terus menjadi eksplisit, kita tahu dalam kasus blog, kunci utama adalah digit. Untuk menunjukkan angka di kalimat biasa kita gunakan \ d, maka kita melihat +, yang berarti "satu atau lebih," dan menerapkan untuk digit. Jadi ini berarti kita mungkin memiliki "satu" digit, seperti 1 atau 5, atau lebih, seperti 123.542 atau 3522. Akhirnya, setelah digit itu, url berakhir, yang dilambangkan dengan $ tersebut. Oke, selanjutnya, kita melihat kita menggunakan View Generik baru, yang DetailView. The tampilan detail mengambil model, yang sedang kita katakan adalah Post. Model ini kemudian akan diteruskan dan direferensikan oleh template blog / post.html. Mari kita membuat template yang sekarang: blog/templates/blog/post.html {% extends "personal/header.html" %} {% block content %} <h3><a href="/blog/{{post.id}}">{{ post.title }}</a></h3> <h6> on {{ post.date }}</h6> <div class = "container"> {{ post.body|safe|linebreaks}} </div> <br><br> {% endblock %} Untuk memulai, halaman ini memperluas file header, yang kita sudah dibahas. Judul adalah objek post.title. Kita dapat melakukan ini karena kami melewati model melalui, dan model didasarkan pada kunci utama dari URL (magic!). Dari sini, kita bisa melanjutkan referensi elemen dari model Post kami, yang diisi dari tabel database untuk Posting, menggunakan baris dengan Primary Key yang cocok dengan salah satu di URL! Di dalam tubuh, Anda akan melihat kita lakukan {{post.body | aman | linebreaks}}. Bar yang Jinja filter. Pertama, kita lakukan | aman, yang memberitahu Django untuk tidak melarikan diri HTML, yang memungkinkan kita untuk menulis blog kami dengan HTML. Mengapa Django blok HTML secara default? Pertimbangkan jika Anda memiliki forum atau bagian komentar, dan pengguna dapat mengirim HTML. Astaga, Anda akan memiliki orang-orang memasukkan berbagai skrip, yang Anda pasti tidak ingin! Sejak posting blog ini berasal dari panel Admin, yang berarti kita, kita mengasumsikan data ini akan menjadi aman, sehingga kami bisa menunjukkannya. Selanjutnya, kita menggunakan | linebreaks menyaring
sehingga garis baru benar-benar diberikan garis baru. Dengan cara ini, di halaman admin kita ketika kita membuat paragraf baru, kami tidak benar-benar perlu menggunakan tag paragraf, Jinja hanya akan melakukannya untuk kita, berdasarkan line break.
CHAPTER 11 Publishing Django Project to a web server tutorial Selamat Datang di lain Django Python pengembangan web tutorial, dalam tutorial ini kita akan membahas bagaimana kita dapat menyebarkan website kami untuk server web sehingga orang lain dapat mengaksesnya melalui internet. Ada banyak pilihan yang dapat Anda pilih dari ketika deploying, tapi kami akan menggunakan Digital Oceans. Saya telah memilih bagi kita untuk menggunakan Digital Oceans karena merupakan sepenuhnya fitur virtual private server, yang memberikan Anda akses penuh ke apa pun yang Anda mungkin ingin, memiliki rencana yang serendah $ 5 / bulan, dan juga dilengkapi dengan "satu- klik- aplikasi "server yang memiliki banyak alat yang kita butuhkan pra-instal. Meskipun $ 5 / bulan, Anda dapat ditagih per jam, sehingga bahkan jika Anda hanya ingin mengikuti dan kemudian membatalkan, Anda bisa melakukan itu dan membayar beberapa sen. Jika Anda menggunakan Digital Oceans, Anda bisa mendukung saya dan tutorial, serta mendapatkan $ 10 gratis untuk memulai dengan menggunakan link referral saya. Ini akan memberi Anda 2 bulan hosting gratis untuk aplikasi Anda dengan $5/bulan, dan tentu saja memungkinkan Anda dapatkan melalui tutorial gratis. Setelah masuk ke Digital Oceans, klik hijau "create droplet" tombol besar, dan Anda harus menemukan diri Anda pada layar seperti:
Selanjutnya, pilih "Satu-klik Apps" tab, dan kemudian pilih Django pada 14.04 (atau versi yang lebih baru jika mereka akhirnya memperbarui ini) Setelah itu, pilih ukuran, dan region. $ 5 / bulan lebih dari cukup untuk Anda mulai, dan kemudian Anda memilih suatu wilayah. Anda mungkin ingin mempertimbangkan lokasi fisik Anda, serta yang lain mungkin menggunakan website Anda, dan mencoba strategis menempatkan server pada jarak dekat secara geografis. Selanjutnya, pilih opsi tambahan. Jika Anda berencana untuk terus menggunakan server, Anda harus mempertimbangkan backup otomatis, tetapi Anda dapat mengaktifkan ini nanti jika Anda berubah pikiran. Dari sini, tekan ciptakan, dan server harus berputar ke atas dalam waktu sekitar 60 detik. Setelah Anda memiliki sebuah server, Anda perlu beberapa cara untuk menyambung ke. Pada Mac atau Linux, Anda harus dapat membuka terminal Anda, dan melakukan sesuatu seperti ssh username @ serverip. SSH adalah singkatan dari shell aman, dan ini memberikan Anda akses ke terminal server. Pada Windows, itu tidak begitu sederhana, tapi hampir. Untuk pengguna Windows, saya sarankan Putty, yang dapat Anda gunakan untuk SSH. Di luar SSH, Anda mungkin juga ingin semacam file copy paste UI. Seperti SSH, Anda dapat melakukan SCP sangat sederhana pada Mac dan Linux (tidak pada Windows), tapi saya cenderung lebih suka GUI untuk ini pula. Ada banyak pilihan di sini. Pada Windows, saya suka WinSCP, dan untuk Mac / Linux / Windows Anda juga
dapat menggunakan FileZilla. Dapatkan beberapa cara untuk SSH, dan beberapa cara untuk SCP, dan kemudian pergi ke depan dan mencoba untuk terhubung melalui SSH. Digital Samudra akan mengirimkan password root pengguna awal untuk email Digital Oceans Anda, sehingga Anda akan ingin memeriksa itu. Ketika ada, copy alamat IP server Anda, dan kemudian SSH terbuka dan terhubung dengan username root dan password sebagai salah satu yang Digital Ocean email Anda. Setelah conneciton pertama Anda, Anda akan dipaksa untuk mengubah password. Anda juga akan cenderung mendapatkan peringatan seperti: Hal ini hanya memberitahukan bahwa ini adalah "baru" hubungan yang belum pernah dibuat sebelumnya. Jika Anda melihat ini dan Anda tidak berubah server, sesuatu yang telah cenderung kacau. Jika Anda melihat ini pada server baru, maka itu benar-benar normal. Setelah Anda login, dan password baru Anda, Anda siap untuk saat ini. Jika Anda pergi ke browser web Anda, dan masukkan alamat IP server Anda, Anda harus mendapatkan awal "bekerja" halaman arahan Django, seperti:
Besar, sehingga apa yang kita miliki sejauh ini pada dasarnya apa yang terjadi setelah Anda menyelesaikan tutorial Django pertama, setelah menjalankan perintah startproject. Yang mengatakan, kita sudah punya sedikit kode yang kita sudah menulis. Jika Anda hanya sekarang tuning, Anda dapat mengambil kode Anda secara pribadi telah ditulis pada Anda sendiri dan ikuti bersama, atau Anda bisa ambil kode kita sampai saat ini: Part 10 kode contoh. Setelah Anda tahu apa file yang Anda ingin meng-upload ke server, ambil apapun SCP client / metode yang Anda pilih, dan terhubung ke server Anda (catatan: jika Anda menggunakan FileZilla, Anda mungkin perlu menentukan bahwa Anda menggunakan port 22, yang merupakan pelabuhan aman). Terhubung ke server. Jika Anda menggunakan klien baru, ini akan menjadi pertama kalinya Anda menghubungkan, sehingga Anda mungkin mendapatkan peringatan sidik jari yang lain. Setelah terhubung, Anda mungkin akan berakhir di direktori pengguna yang Anda login sebagai. Dalam kasus kami, yaitu / root /. Satu kali klik install untuk Django dengan Digital Ocean menempatkan proyek Django kami di: / home / Django / django_project /. Anda harus melihat bagaimana dalam django_project, ada direktori django_project lain. Ini adalah sama seperti kami mysite / mysite. Membuka file lokal kami, head ke mysite / dan ambil blog, file pribadi, dan db.sqlite3 / direktori. Mengambil orang-orang dan menyeret mereka ke klien SCP Anda, menempatkan mereka ke dalam folder /home/django/django_project/ Pada titik ini, kita perlu mengubah semua jalur django_project untuk mysite atau sebaliknya. Saya akan memilih untuk mengubah mysite, karena ini adalah lebih cenderung menjadi operasi Anda melakukan di masa depan. Segera, Anda dapat memutuskan untuk menggabungkan aplikasi orang
lain ke dalam Anda sendiri, dan ini mungkin diperlukan dari Anda untuk membuat pekerjaan itu. Pada dasarnya, kami telah menambahkan aplikasi baru di sini, jadi, seperti biasa, apa yang harus kita lakukan? Kita perlu menginstal /home/django/django_project/django_project/settings.py, kita ingin menginstal aplikasi baru. Kami memiliki dua aplikasi, blog dan pribadi. aplikasi! Menuju ke INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', 'personal', ) Selanjutnya, kita perlu mengatur database django_project menggunakan SQLite (masih mengedit file settings.py) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } Selanjutnya, kita ingin mengunjungi kami mysite / mysite / urls.py dan ambil url yang mengarah ke pribadi dan blog, menambahkan ini ke django_project / django_project / urls.py url(r'^', include('personal.urls')), url(r'^blog/', include('blog.urls')), Selanjutnya, kita mungkin ingin untuk terus maju dan memperbarui Django pada webserver. Menuju SSH, dengan asumsi Anda sudah terhubung, Anda mungkin ingin melakukan hal berikut: apt-get update apt-get upgrade pip install --upgrade django service gunicorn restart Sekarang kembali ke browser Anda, dengan server Anda IP di address bar, dan kemudian refresh. Pada titik ini, Anda harus mendapatkan blog Anda, kecuali Anda mungkin hilang hal-hal seperti
gambar dan CSS. Sesuatu seperti ini dapat terjadi pada Anda: Ada kemungkinan bahwa ini bukan masalah bagi Anda di masa depan, tetapi, untuk saat ini, aplikasi satu kali klik tidak mudah menghubungkan file static, dan kita akan perlu untuk menangani untuk itu. Apa yang terjadi saat ini adalah Digital Ocean Django pada 14.04 aplikasi yang hanya tidak menemukan file static, terutama karena tidak tahu di mana mencarinya. Tidak masalah, kami bisa memperbaikinya. Pertama, kami ingin melakukan: nano /etc/nginx/sites-available/django Ini akan membuka konfigurasi untuk Django, dan kemudian Anda akan ingin menggunakan tombol panah untuk menggulir ke bawah, mencari direktori file proyek Django static. Menemukan hal berikut: Bagi saya, jalan adalah /home/Django/django_project/ django_project/static. Copy ini, dan kepala ke /home/django/django_project/django_project/settings.py, mengedit file, turun ke bawah, dan Anda akan menambahkan variabel baru, STATIC_ROOT atas STATIC_URL seperti begitu : klien SCP Anda, menuju ke STATIC_ROOT = '/home/django/django_project/django_project/static' STATIC_URL = '/static/' Perhatikan bahwa jalan static Anda mungkin berbeda, tapi mungkin sama dengan saya. Menyimpan, keluar. Menuju kembali ke SSH, keluar file konfigurasi jika Anda masih di dalamnya (control + x), tidak menyimpan jika ia meminta Anda untuk menyimpan. Berikutnya, lakukan: cd / home / django_project /, yang akan mengubah direktori di terminal ke lokasi tersebut. Anda harus berada dalam direktori sekarang yang berisi file manage.py. Apa yang ingin Anda lakukan selanjutnya adalah menjalankan berikut melalui SSH: python manage.py collectstatic. Tekan enter, ketik ya, dan
Anda akan melihat pesan tentang file static yang telah disalin ke lokasi static. Besar, sekarang kembali ke browser Anda dengan alamat IP server, tekan refresh, dan Anda sekarang harus memiliki file static Anda bekerja: Pada titik ini, kita pada dasarnya dilakukan. Yang mengatakan, jika kita ingin berbagi website kami pada saat ini, itu berarti kita sedang membutuhkan untuk berbagi alamat IP, yang cukup sulit untuk diingat. Apa yang kita akan menunjukkan selanjutnya adalah bagaimana untuk melampirkan nama domain untuk web server. Untuk melakukan ini, ada dua langkah utama, dengan asumsi Anda sudah memiliki nama domain. Jika Anda tidak memiliki nama domain sudah, Anda akan perlu untuk mendapatkan nama domain dari registrar domain. Sesuatu seperti domains.google.com atau GoDaddy akan cukup. Setelah Anda memiliki nama domain dengan registrar domain, Anda ingin mengatur nameserver untuk nama domain. Pada domain Google, itu tombol Klik itu, dan, tergantung pada pencatat, layar mungkin terlihat berbeda, tetapi pada dasarnya Anda mencari untuk mengatur server nama kustom. Umumnya Anda akan mengatur sesuatu seperti 2-4 nameserver. Untuk Ocean Digital, Anda ingin menambahkan: ns1.digitalocean.com ns2.digitalocean.com ns3.digitalocean.com Tambahkan mereka, dan menyimpannya. Pengaturan / mengubah nama server dapat mengambil apa pun dari yang instant sampai 48 jam. Umumnya, sebagian besar pendaftar akan mengupdate
nameserver dalam waktu 15 menit, tetapi, jika Anda mengubah server nama, itu bisa memakan waktu hingga 48 jam untuk sepenuhnya terjadi. Pada titik ini, Anda memberitahu dunia bahwa domain Anda ke nameserver yang Anda pilih. Semua yang terjadi pada saat ini, bagaimanapun, adalah bahwa Digital Ocean sekarang memiliki tanggung jawab untuk rute lalu lintas, namun Digital Ocean, pada saat ini, tidak tahu apa yang ingin mereka lakukan dengan domain Anda. Dengan demikian, ke depan, kita perlu kepala ke Digital Ocean (atau apa pun host yang Anda gunakan), dan Anda akan ingin kepala ke jaringan / daerah DNS untuk host Anda. Sama seperti nameserver pada domain registrar, hal mungkin sedikit berbeda tergantung pada host Anda, tetapi biasanya hal-hal yang cukup mirip. Pada Digital Oceans, Anda pergi ke Networking di atas, pilih Domain, kemudian "menambahkan domain." Di sana, Anda mengisi nama domain yang ingin Anda menangani untuk, dan kemudian Anda menentukan server yang ingin Anda menangani domain.
Setelah itu selesai, catatan untuk domain Anda harus terlihat seperti: Akhirnya, setelah semuanya disimpan, Anda harus dapat pergi ke domain Anda, dan website Anda harus beban. Sekarang bahwa Anda telah server terharu, Anda akan perlu untuk menciptakan user admin: python manage.py createsuperuser
Anda juga mungkin harus memberikan pengguna Django (pada server Anda) izin untuk menulis ke file database. Jika Anda mengklik dan menyeret database sqlite, ini berarti ia diciptakan kemungkinan oleh root, sehingga Anda akan perlu memberikan akses baca / tulis ke file sqlite. Sesuatu seperti chown Django: Django db.sqlite3 harus melakukan trik. Terima kasih kepada pengguna FrOyxx untuk membesarkan potongan-potongan yang hilang! Pada titik ini, Anda harus memiliki proyek Django Anda di cloud, ditugaskan untuk nama domain apapun yang Anda inginkan. Dalam tutorial berikutnya, kita akan menambahkan ceri di atas dengan menerapkan SSL gratis sehingga lalu lintas kami dapat HTTPS lalu lintas.
CHAPTER 12 Securing Django web server with SSL - HTTPS and Lets Encrpyt Selamat Datang Part 12 dari seri tutorial Django kami, di bagian ini kita akan membahas cara mengaktifkan SSL untuk HTTPS menggunakan Lets Encrypt di server nginx kami. Melakukan hal ini dengan Lets Encrypt adalah gratis. Run: sudo apt-get update sudo apt-get upgrade sudo apt-get install git cd /home/django/django_project/ Next, we want to grab the Lets Encrypt files and set things up: git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt ./letsencrypt-auto --help Selanjutnya, kita akan ambil sertifikat kami: service nginx stop ./letsencrypt-auto certonly --standalone -d example.com ...replacing example.com with your website. Ini hanya akan memberikan sertifikat, tetapi tidak akan mengkonfigurasi server Anda untuk benar- benar menggunakan sertifikat itu. Dengan demikian, selanjutnya: sudo nano /etc/nginx/sites-available/django Di bagian atas, Anda ingin komentar pada dua baris tentang mendengarkan pada port 80, kemudian tambahkan berikut: server { #listen 80 default_server; #listen [::]:80 default_server ipv6only=on; listen 443 ssl; server_name psyber.io;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; Berikutnya, gulir ke bawah ke bagian bawah file, dan menambahkan pernyataan server lain: server { listen 80; server_name example.com; return 301 https://$host$request_uri; } Apa yang dilakukan bagi kita adalah pengalihan semua lalu lintas menjadi HTTPS lalu lintas. Ini tidak perlu, tapi saya tidak tahu mengapa Anda akan memilih untuk tidak melakukan hal ini. Dalam beberapa kasus, hal seperti iklan mungkin tidak memiliki pilihan pengiriman aman, sehingga melanggar iklan pada halaman Anda, sehingga memaksa HTTPS bisa berarti Anda kehilangan uang. Saya tidak menemukan ini menjadi alasan layak untuk tidak memaksa HTTPS, tetapi Anda mungkin menganggap bahwa berbeda. Perhatikan bahwa sementara akun Google Adsense Anda mungkin awalnya menderita karena alasan ini, Google hasil pencarian organik Anda akan mendapatkan keuntungan dari website Anda menjadi situs yang aman. Mengganti example.com dengan domain Anda, menyimpan perubahan, restart nginx: service nginx restart Memuat domain Anda sekarang harus menghasilkan Anda simbol kunci hijau dan HTTPS.