Pembelajaran jero Web lan keamanan adhedhasar web Edisi Katelu Charlotte Harper 3 Juli 2024 Dianyari / Ngonversi 3 Juni 2025
Foreword:
Pertimbangan keamanan ing piranti lunak bangunan kanggo Web minangka bagean penting kanggo rencana lan eksekusi pangembang, nanging teknik prototipe sing bisa dipercaya, stabil, lan migunani kanggo tujuan praktis. Dom (dokumen MARTUD OBUCT), kanthi implementasine HTML, Javascript, lan CSS uga nggawe pangembang lan karakter sing bisa dienggo kanthi gampang lan menehi panggunaan sing cocog karo rata-rata Nanging, pangguna pungkasan sing pengin dipateni utawa entuk prekara ing internet, biasane ing piranti smartphone layar demek. Umume wong ora bakal ngerti babagan miwiti nalika pengin mbangun situs web, mula bisa nggunakake barang-barang sing paling apik, lan utamane nggunakake barang sing bisa digunakake tanpa nggunakake watesan kanthi nggunakake lan fleksibilitas. Yen sampeyan duwe sawetara menit kanggo maca liwat buku iki lan sinau apa sing arep mulang sampeyan, utawa uga ngomong karo sampeyan kanthi nggunakake tujuan sampeyan lan nggawe piranti lunak sing penting lan tulisake kanggo sampeyan lan nggawe persis sing dikarepake lan bisa nyukupi kabutuhan para pamirsa.
Babagan Aku: Aku minangka pangembang piranti lunak kanthi macem-macem pengalaman ing C / C ++, Java, Python, HTML, CSS lan JavaScript. Aku mbangun situs web sing pengin digunakake, pengin ngunjungi, lan malah ketagihan nggunakake kanggo sinau, nggawe lan mateni wektu, lan sing paling penting aku adol piranti lunak. Yen sampeyan duwe ide kaya apa sing pengin situs web kanggo katon lan fungsi, sampeyan gelem nyengkuyung supaya aku bisa nyukupi kebutuhan, lan sampeyan bakal bisa nyukupi biaya, lan sampeyan uga bisa nggunakake aplikasi keamanan teknologi Tech sampeyan mung bisa ngakses. Tinimbang nyoba adol sampeyan, aku nyoba tuku sampeyan: Aku pengin ngobrol karo sampeyan babagan informasi sing wis ana, lan mulang sampeyan apa sing sampeyan butuhake, lan mulangake karier sing sukses ing lapangan apa wae sing dikarepake. Lan supaya aku jelas, pendhidhikan sing dakwenehake sampeyan bakal ora resmi. Sampeyan bisa sekolah lan sinau kabeh kanthi pendhidhikan formal, utawa malah maca buku iki ing sekolah, ngrampungake tugas sampeyan, nanging aku ora bakal menehi sampeyan ing kursi panas lan njaluk sampeyan ngrampungake tugas. Aku dudu profesor sampeyan, sampeyan bisa mikir kaya kanca sing pengin nuntun sampeyan menyang kari sing diusir kanthi sukses pribadi. Lan aku ora adol sampeyan sukses, sampeyan kudu tuku kanthi wektu. Sinau kode duwe kurva belajar sing tajem lan ora gampang, utawa mesthine. Sampeyan kudu kerja keras kaya sing sampeyan bisa lan terus nyoba lan gagal lan nyoba maneh sanajan sampeyan frustasi supaya sinau lan mbangun aplikasi dhewe. Sing ana ing alam kode kasebut. Kode diluncurake dening kompiler sing dirancang kanggo menehi pesen kesalahan programer, lan iki bakal mulang sampeyan carane kode, sanajan sampeyan mung nyalin kesalahan menyang mesin telusuran lan maca conto wong liya. Lan aku kudu ujar, sampeyan ora kudu sugih banget, cerdas, sukses, utawa malah detail kanthi orientasi utawa diatur kanggo mbangun app. Komputer ngurus organisasi kasebut kanggo sampeyan. Sampeyan mung kudu terus-terusan liwat pacoban lan kesalahan, njaga fokus lan kerja keras apa sing sampeyan lakoni, lan sampeyan bakal duwe karier sing sukses banget.
Aku iki: Aku sadhar yen bagean pungkasan luwih lengkap babagan sinau lan njupuk cara saka buku iki. Sapa aku persis? Sing dadi pitakonan rumit. Aku ora jelas babagan aku, amarga aku nandhang penyakit medis sing bisa nggawe aku malah bisa nggawe kode utawa nulis buku kanthi kode sosialisasi iki, nalika menehi masalah kanggo nggawe uripku luwih angel nalika nerangake ngenalake awakku. Singkat, yen sampeyan maca buku iki, sampeyan nggawa omah amarga sampeyan wis ngilangi lan mikir migunani, utawa sanajan sampeyan mung maca kanthi apik, sampeyan mung maca sampeyan kanthi sukses ing kabeh sing ditindakake. Aku minangka insinyur, pangembang piranti lunak, lan siswa, lan aku nulis buku iki kanggo siswa sing luwih gampang kanthi nyalinake kanthi nyalin kaya sing bisa digunakake kanthi nyalin kanthi nyalin sing bisa nyalin kanthi nyalin sing bisa ditindakake kanthi sukses ing garis bisnis. Umume, iki sing daklakoni: Aku mbangun aplikasi kanggo mbantu aku lan wong liya sing sukses. Aku uga penulis uga, sanajan iki minangka publikasi pisanan sing dakkarepake kanggo ngrampungake portofolio dadi dokumen sing migunani, lan uga seniman uga. Aku bakal ngakoni iki kanggo sampeyan, aku dadi wong sing aneh. Aku ora sampurna, aku wis mbukak Injut sanajan aku kudu ninggalake kolega lan universitas lan ninggalake negara-negara supaya bisa nyoba nggawe luwih sukses. Aku dadi wong wadon, aku nganggo dandanan, njupuk foto dhewe, nyandhang gaun lan panduman liyane, lan aku tetep sadar saka awake dhewe minangka wanita kanthi alam. Aku duwe masalah karo wong liya ing jaman biyen sing kepungkur sing nyebabake perjuangan kanthi nulis lan mbangun buah WebAps, lan aku njaluk ngapura yen aku durung entuk buku iki ing tangan sampeyan. Sampeyan pengin maca lan nulis kode sing katon kaya mine lan tumindak kaya mine lan nindakake perkara sing padha, nanging yen sampeyan bisa tuku buku iki, amarga yen sampeyan kudu nggawe buku sampeyan kudu sukses ing urip sampeyan. Aku duwe macem-macem masalah karo kulawarga sing tuwuh, kahanan kesehatan, dokter, media, lan undang-undang, lan kodeku kanthi jero nggambarake perjuangan sing ana finisme lan alam wanita sing dibagi. Nanging, buku iki minangka prekara sing dakkarepake, bayi, portofolio, lan panguripan, mula aku ngajeni pertimbangan sampeyan nalika njupuk teks lan sinau saka aku. Elinga, aku ora sampurna, buku iki bakal duwe kesalahan, révisi, lan edisi anyar, lan sampeyan kudu mikir karo otak logis sampeyan sing paling apik kanggo nulis. Uga ngerti yen aku tegese apik kanggo sampeyan sanajan sampeyan nemoni tantangan nalika ditulis. Pikirake kaya iki: Yen sampeyan mung bisa nyewa sistem komputer kanggo nindakake apa wae sing bisa dibayangake ing papan digital, simpen kabeh informasi sing sampeyan nemoni, lan ngerti lan ngerti, sampeyan bakal ngerti, sampeyan bakal nemoni masalah, sampeyan bakal nemoni masalah sing sampeyan tindakake lan malah nerbitake. Aku pitutur marang kowe, amarga aku nemoni masalah sing padha. Gunakake buku iki kanthi resiko dhewe, kerja karo komunitas lan komunitas sampeyan kudu mbangun piranti lunak ing papan sing aman, lan ngapa sampeyan bisa ngrampungake, lan ngapa sampeyan bisa nggawa sampeyan kanthi cara sing salah Kita bakal bisa, Internet. Sampeyan bisa uga ora pati ngerti karo sapa wae sing dakkarepake mung sawetara tembung, nanging aku ngajak sampeyan maca, sampeyan bakal ngerti yen sampeyan terus maca lan ngerti proyek sampeyan nalika ngrampungake pakaryan. Ora bakal ana kerja ing buku iki, anggere guru guru ora nemtokake sampeyan, nanging aku semangat banget kanggo mbangun portofolio babagan sampeyan bisa ngetrapake apa sing wis sampeyan sinaoni. Proyek Capstone minangka dhasar sing paling sampeyan bakal maca ing buku iki, amarga nggabungake kode saka proyekku, lan sinau kanggo nulis kanthi cepet lan bisa ndeleng aplikasi sing luwih populer, lan bisa ndeleng kanca kanthi apik, lan ing News kanggo sampeyan, utawa ing warta kasebut.
Apa buku iki yaiku: Buku iki minangka tutorial kanthi conto. Sampeyan bisa nemokake kode ing kene, pandhuan kanggo cara sinau kode, informasi babagan kode debugging lan ndandani kode, ngupayakake kode, lan nggawe gambar sampeyan, lan nggawe gambar sampeyan, uga gambar sampeyan, uga piranti lunak sing sampeyan lakoni Ing cahya sing paling mutlak dadi paling apik kanggo pangguna pungkasan sampeyan, pengunjung situs web. Ing buku iki, aku bakal nuduhake sawetara conto desain piranti lunak kanthi fokus ing web minangka platform uga keamanan. Kita bakal miwiti pengalaman belajar kanthi mbangun proyek dhasar nggunakake cangkang UNIX, kanthi fitur serep lan skrip. Banjur, kita bakal mriksa situs web blog dhasar, upgrade blog kita nganggo fitur foto lan video uga nggunakake fitur-fitur kasebut kanggo nggarap solusi keamanan kanthi nggunakake piranti lunak gratis, lan aman server nggunakake modulat bukti asli (pam). Banjur bakal mriksa nangani file lan pangolahan, njelajah panyuntingan video, sumbangan swara, scanning swara, windows barcode lan pangenalan karakter optik, ing antarane konsep karakter liyane. Sadawane cara kita bakal mriksa API sing bakal mbantu kita nggawe piranti lunak luwih migunani lan aman, kanthi pilihan gratis lan mbayar. Sadawane dalan, kita bakal njelajah keamanan fisik lan alat militan kayata senjata api lan muntions, lan rancangan liyane, lan réset lan dron liyane sing bakal bisa nglindhungi piranti lunak lan tampilake pertahanan dhiri. Kita bakal ngilangi dalan kanggo mbangun game, mesin rendering 2D lan 3D, lan kerja karo Hardware sing dipasang ing conto piranti lunak rendering dimensi Dasar Dimensional ing Silicone karet masing-masing. Sadawane dalan, kita uga bakal nggunakake solusi belajar mesin sing wis kasedhiya kanggo supaya luwih aman piranti lunak. Kita uga bakal nggunakake alat Saham sing kasedhiya kanggo web supaya bisa nyiram lan ngamanake proses kasebut. Buku iki minangka panuntun kanggo sukses kanggo mbangun aplikasi web lan nggabungake karo jaringan mekanik komputer lan sistem mekanik sing dipasang, lan piranti lunak sing ana ing latar mburi ora ana kawruh latar mburi utawa pengalaman sadurunge.
Apa buku iki: Yen sampeyan pengin duwe situs web, sampeyan mung bisa nyiyapake toko sing gampang lan adol apa sing sampeyan butuhake, kirim blog, kirimake foto utawa video, utawa liya-liyane tanpa nulis kode siji. Buku iki dudu. Buku iki bakal mulang sampeyan carane mbangun piranti lunak sing luwih migunani, kanthi fungsi lan aman tinimbang piranti lunak sing paling anyar sing bisa ditemokake, amarga perusahaan sing paling anyar sing bisa digunakake kanggo nggawe dhuwit kanggo wong sing ora nindakake apa-apa. Yen sampeyan ngetutake buku iki kanthi rapet, sampeyan pengin nulis kode, kode riset, mbangun aplikasi sampeyan dhewe, lan sampeyan bakal entuk dhuwit saka apa sing sampeyan lakoni. Aku bakal ngasilake dhuwit saka buku iki, sanajan ing tahap awal, amarga ngemot informasi sing dibutuhake lan pengin maca, lan wis tuku nalika tuku utawa nggunakake aplikasiku. Buku iki ora bakal mbangun aplikasi kanggo sampeyan, nanging bakal nuding sampeyan ing arah sing bener lan sampeyan kanthi alat sing sampeyan butuhake lan tips, kanca-kanca, para pengunjung, lan wong-wong internet pengin nggunakake.
Apa sing bakal sampeyan sinaoni: Buku iki bakal mulang sampeyan carane mbangun piranti lunak lan adol piranti lunak, piranti lunak media, fitur web sing bisa diakoni, lan nerjemahake komunikasi kaya Bluetooth lan NEXT). Buku iki bakal mulang sampeyan carane nggunakake komputer ing deban, kepiye mbangun kode Bash, nggunakake piranti lunak sing digunakake kanggo menehi tandha-tandha ing situs web kanthi nggunakake teks sing digunakake kanggo pesen teks kanggo menehi verifikasi Utawa tujuan liya, mindhai ID, gambar lan moderat video, microtaksi data supaya aman piranti lunak, pangolahan pembayaran, tugas-tugas kriptocrony, tugas sing asynchronous, lan liya-liyane. Sampeyan bakal sinau carane mbangun piranti Bluetooth dhewe, kanthi baterei, pangisi daya, mikrocontroler, sirkuit, motor, nggunakake Solder, Wire lan Mattered uga bahan cast. Aku bakal nuduhake kepala sekolah desain 3D sing ditrapake kanggo manufaktur lan alat sing aditif lan mati, dadi sampeyan bisa ngasilake dhewe, piranti hardware kanthi baterei, pangisian elektrik, lan output elektronik. lan jaringan nganggo Bluetooth lan Web. Khusus, kita bakal mriksa pitunjuk loro kasus, massage banyaan lan senjata api buatan, sing diprogram ing Openscad, sing kasedhiya minangka antarmuka grafis utawa bisa digabungake ing web kanggo asil sing luwih cepet. Sampeyan bakal sinau carane mbangun lan masang situs web kanthi ora pengalaman sadurunge, nggawe fungsional, aman, apik, apik, migunani lan sing penting lan penting banget. Sampeyan bakal ngerti carane nggunakake mesin Pembelajaran Mesin lan Visi Komputer kanggo nggawe situs kanthi aman lan luwih lengkap, lan nggawe swara kanggo nggawe situs web sing bisa digunakake kanggo nggawe situs web sing bisa digunakake kanggo nggawe situs web sing bisa digunakake kanggo nggawe kabeh situs web sing kudu ditawani, lan luwih penting nggawa wong ing piranti lunak lan bisnis. Buku iki bakal fokus banget babagan media, keamanan lan mesin sing dadi telung komponen utama sing bisa digunakake kanggo nggunakake piranti sing migunani kanggo web kanthi cara sing nyata, lan tangan lan bisa digunakake kanthi otomatis, lan kuwat. Buku iki mulang UNIX, khusus Debian (Ubuntu), Bash Shell, Python, HTML, CSS, Javascript, uga piranti lunak Bash sing migunani kaya git lan FFMPEG. Aku uga bakal mulang sampeyan carane perdagangan Cryptocurrency kanthi otomatis, lan njupuk pembayaran ing Cryptocurrency utawa saka kertu debit biasa nalika sampeyan milih pengalaman sampeyan yen sampeyan milih. Aku bakal mulang sampeyan carane nggawe dhuwit saka situs web liwat uga, Cara Siap app kanggo mesin telusuran lan nggawe cepet, lan peringkat akeh telusuran sing umum. Aku bakal mulang sampeyan carane adol piranti lunak, ngiklanake, ngiklanake kanggo klien sing nggoleki layanan sampeyan, lan nggawe jeneng kanggo sampeyan ing Internet liwat Avenues sing wis ana, luwih murah, lan bisa digunakake. Aku bakal mulang sampeyan carane nyimpen data ing komputer awan sing bisa digunakake kanggo sampeyan lan supaya bisa nggunakake situs web kanthi nggunakake situs web kanthi nggunakake situs web kanthi nggunakake klik tombol sampeyan mung. Buku iki bakal fokus ing praktisi nerbitake lan nyebar media kanthi akeh, saka teks menyang foto kanggo Audio, lan adol sampeyan, lan nggawe sampeyan, piranti lunak sampeyan kanthi cara sing paling apik. Sampeyan uga bakal sinau sawetara tips lan trik saka aku, saka tips coding, vality praktis kaya dandanan sing paling apik kanggo nggunakake piranti lunak sing paling apik kanggo nggunakake piranti lunak sing paling apik kanggo sampeyan kanthi nggunakake piranti lunak sing luwih apik kanggo sampeyan kanthi nggunakake. Buku iki diarani "PraktisPembelajaran jero Web lan keamanan adhedhasar web "kanggo alesan: bisa uga sinau babagan kode, khususe kanggo nggawe situs web sing bakal nunjukake sampeyan kanggo nggunakake situs web sing bakal nunjukake sampeyan kanggo nggawe situs web sing bakal nunjukake sampeyan kanggo nggunakake situs web sing bakal nunjukake sampeyan babagan kode kerja sing bakal nunjukake sampeyan kanggo nggunakake situs web sing bakal nunjukake sampeyan babagan kode kerja sing bakal ditetepake ing teks. Katrangan, lan tugas liyane kaya metrik prediksi sing asile saka gambar, kayata gambar sing bisa dipindhah, utawa bisa uga bisa digunakake ing sandhi. Komputer sing aman, komputer sing biasane sampeyan njaluk sampeyan kanggo jeneng pangguna lan kode sandhi lan piranti lunak sing gampang, nanging yen sampeyan wis cukup nggunakake piranti lunak anyar, nanging yen sampeyan ora duwe piranti lunak kanthi aman, utawa sapa wae (situs apa wae sing sampeyan gunakake). Sapa wae sing mbangun piranti lunak sing ora bisa dingerteni duwe prekara apa sing diarani. Piranti lunak kanthi ora aman amarga piranti lan akun sing digunakake kanggo ngakses, ora mesthi ana ing tangane sapa wae sing nandhang sacedhake kanggo piranti lunak kasebut dhewe. Iki minangka fokus ing buku iki. Komputer jaringan kanthi standar kanthi token kunci dawa, sing diarani lan tombol cangkang ssh utawa aman, lan liya-liyane dijamin karo server web, amarga server web uga nyedhiyakake akses sing mbukak ing server kasebut dhewe. Server Web duwe akses menyang browser web pangguna, sing bisa uga bagean paling kuat piranti pangguna, amarga papan sing pangguna bisa ngakses piranti lunak jaringan. Toolkit iki bisa nggawe teks, kaca web sing sampeyan deleng, lan uga bisa ngrekam gambar, audio lan video, lan bisa maca lan nulis menyang server rai sing ora bisa diwaca lan bisa ditulis menyang server rai sing unik lan bisa ditulis karo server web sing diikat menyang situs web. Nggunakake kabeh alat sing dienggo, karo buku iki, sampeyan bakal nglengkapi karo ilmu kanggo mbangun situs web sing aman, lan kabeh sistem komputer jaringan aman sing bisa digunakake, apa sing ditawarake lan katon lan ngrasa
Ngendi kanggo miwiti: Sampeyan welcome kanggo ngliwati bagean sing diwiwiti buku iki, utawa bagean, menyang kode sing tepat sing dibutuhake, utamane yen sampeyan duwe pengalaman kanthi rinci ing buku iki uga minangka conto panggunaan dokumen lan conto panggunaan sing praktis. Yen sampeyan ora duwe pengalaman ing kode nulis, aku saranake sampeyan maca kabeh buku iki, lan utamane menehi saran sampeyan maca bagean sadurunge, kanggo mesthekake buku iki cocog kanggo sampeyan. Yen buku iki ora cocog kanggo sampeyan, nimbang-nimbang menyang kanca utawa sedulur sing bisa minat sinau babagan pembangunan web, lan uga mikirake nyilih maneh lan sinau saka kesenjangan sing gagal sampeyan dadi sadurunge. Miwiti ing ngendi sampeyan bakal, saben bagean saka buku iki bakal migunani yen sampeyan pengin mbangun aplikasi sing migunani, lan nimbang manawa aplikasi paling apik dibangun karo pangguna pungkasan: ngerti pelanggan. Saiki sampeyan ngerti aku, sampeyan ngerti buku iki, lan sampeyan wis siyap diwiwiti. Kanggo miwiti, njupuk komputer (sanajan laptop sing paling murah saka toko kothak, Amazon, utawa desktop lawas bisa digunakake, lan aturake cara sing bisa digunakake kanggo sampeyan.
Cara maca buku iki: Teks sing disorot, nuduhake manawa teks kasebut kalebu prompt printah, ing ngendi sampeyan bakal nulis kode sing sampeyan lakoni. Printah printah kasebut kanthi akeh fokus fokus lan mbutuhake ora ngeklik, nyepetake alur kerja lan nggawe luwih gampang sampeyan.
Miwiti: Ayo nyilem ing. Kita bakal miwiti kanthi mbangun kode ing mesin lokal lan wiwiti tanpa mbangun situs web sing nyambung menyang Internet. Iki luwih aman kanggo miwiti, ora biaya, lan gampang kanggo sampeyan. Gumantung ing sistem operasi sampeyan, entuk cangkang bas bakal beda. Kanggo Mac OS, aku nyaranake nginep mesin virtual ing wektu iki, amarga sampeyan bakal entuk kompatibilitas sing paling akeh karo mesin virtual. Macem-macem panyedhiya kayata VirtualBox lan Paralells bisa mbukak mesin virtual kanggo sampeyan, sanajan bisa nginstal ubuntu langsung ing mesin, yen luwih seneng nggunakake lingkungan sing asli sing disaranake supaya nggawe pengalaman sing cepet lan streamline. Yen sampeyan nggunakake Linux utawa Windows, sing disaranake, mula cukup gampang kanggo nggawe proyek. Bukak terminal sampeyan, aturi ukuran nalika sampeyan ndeleng pas, lan wiwiti langkah 2. Yen sampeyan nggunakake Windows, mangga tindakake langkah 1.
Langkah 1: - Pangguna Windows mung Ing Windows, Bukak Command Prompt minangka administrator lan jinis wsl -stall
Langkah 2: - Terusake ing kene, utawa skip langkah 1 menyang kene yen sampeyan ora nggunakake windows Ing terminal sing mbukak, (gumantung saka OS, sing diarani Ubuntu ing Windows, Terminal ing Mac utawa Linux, utawa jeneng sing padha), wiwiti nggawe proyek. Kita nindakake iki kanthi printah Mkdir, sing nggawe direktori. Yen sampeyan kudu nggawe direktori kanggo nyimpen proyek, sing disaranake, gunakake printah CD kanggo ngganti menyang direktori lan lan
CD / PATH / TO / direktori - Jalur kasebut minangka folder (file) sing ndhisiki direktori tujuan sampeyan, path / omah / jeneng pangguna (ing ngendi jeneng pangguna sampeyan minangka jeneng pangguna). Kanggo ngganti menyang direktori gawan, jinis CD utawa CD ~ Mkdir Conto - Ganti "Tuladha" kanthi jeneng direktori
Saiki sampeyan duwe direktori sing digunakake kanggo proyek sampeyan. Dadi penting banget kanggo duwe direktori iki, sampeyan kudu ngalih menyang mesin sing beda utawa masang kode sing sampeyan tulis supaya siap kanggo web, kita bakal nggawe skrip kanggo nggawe serep ing sawetara langkah sabanjure. Nanging mbangun skrip mbutuhake kode, lan kode kudu otomatis bisa migunani. Dadi ayo mbangun skrip kanggo mbangun skrip dhisik. Ayo miwiti kanthi nggawe skrip lan nggawe eksekutif. Kita bakal nggunakake sudo, chmod lan sentuhan iki, lan nelpon "askrip" askrip ".
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Saiki kita wis nggawe skrip, digawe kaleksanan, lan wis siyap kanggo ngowahi. Nano minangka editor teks sing bakal ngidini sampeyan ngowahi teks tanpa ngeklik, sing luwih gampang tinimbang nggunakake antarmuka pangguna grafis. Kanggo ngowahi file karo Nano, gunakake Nano banjur dalane menyang file kasebut. Kanggo nggawe skrip sing nggawe skrip, mula padha karo skrip kita ing wiwitan. Kita bakal nggunakake kode sing padha kaya ing ndhuwur, ngganti jeneng skrip, "askrip" kanthi parameter argumen, $ 1. Iki ngidini kita nelpon naskah kanthi ngetik nummatkan nummasing Sudo, ing endi wae kita bisa nggawe skrip anyar kanthi ngganti "naskah" kanthi jeneng naskah sampeyan. Kode ing Nano kudu katon kaya:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Lan kanggo nutup Nano, kita bisa nahan tombol kontrol banjur pencet X, banjur Y kanggo nuduhke kita nyimpen file kasebut, lan kenek bali. Saiki, tinimbang ngetik telung printah kasebut kanggo ngowahi skrip, kita bakal bisa ngetik Ascript Ascript Sudo kanggo ngowahi maneh skrip. Iki bisa digunakake! Lan skrip anyar bisa mbukak kanthi gampang kanthi nelpon ing cangkang. Ayo nyimpen karya saiki: Ayo nulis skrip serep kanggo nylametake skrip anyar kita banjur serep maneh ing direktori proyek kita, nalika uga nggawe serep serep.
sudo ascript backup
Saiki, ing Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Ngendi / path / kanggo / direktori minangka dalan kanggo proyek sing digawe karo MKDIR. Mengko, kita bakal ngerti carane nyalin dalan baleni kaya iki kanthi daur ulang lan dhaptar, sing kurang kode, nanging saiki ayo gampang lan duwe sawetara garis. Kanggo mbukak skrip iki lan serep kode, simpen file ing Nano kanthi kontrol + X, lan bali, lan ketik ing ngisor iki menyang cangkang
backup
Yen dijaluk kabeh kanggo tembung sandhi nalika maca buku iki lan ngetutake cangkang, ketik sandhi pangguna kanthi bener, sampeyan bakal duwe telung nyoba maneh. Sampeyan bisa nggunakake panah munggah lan mudhun kanggo nggedhekake printah lan ngowahi, sampeyan kudu mbukak kaping pindho. Prasaja gampang lan ora milih prentah, sadurunge nyunting prentah kanthi sisih tengen, panah kiwa lan tombol mbusak uga keyboard, lan mlaku kanthi bali.
Sugeng! Sampeyan bisa nggawe skrip serep sing apik tenan yen nggawe loro skrip cangkang penting ing direktori sing digunakake. Kita bisa uga mindhah sekitar mengko minangka proyek kasebut dadi gedhe, nanging saiki bisa digunakake saiki. Ayo maju ing méga, kita bakal nggunakake Github kanggo iki (sanajan ana macem-macem solusi git liyane kanggo server, nanging sampeyan uga bisa nguntungake piranti lunak sampeyan nalika sampeyan bisa ndownload kabeh salinan piranti lunak ing mburi sandhi utawa tombol. Iki instrumental nyimpen piranti lunak, utamane kanggo pindhah menyang instan Linux sing aman nalika baris siji kode gagal, supaya sampeyan ora bisa digunakake yen sampeyan ora entuk kasempatan kanggo ngasilake kanthi otomatis, sing bakal kita tutup.
Yen sampeyan durung nggunakake mesin virtual Ubuntu ing wektu iki, aku nggolek mesin virtual Ubuntu ing wektu iki amarga bakal nggawe urip luwih gampang nalika nginstal kabeh paket sing dibutuhake supaya bisa nggawe operasi belajar jero ing komputer. Kita bakal mindhah kode menyang server Web ing wektu sing cedhak, nanging kita pengin mesthekake paling sethithik sawetara lapisan keamanan ing njaba server web sing tahan kanggo nggawe sawetara paket Linux supaya bisa ditindakake. Yen sampeyan isih pengin nggunakake Mac OS, sampeyan bakal nelusuri lan nginstal paket sing perlu kanggo online, nanging bisa uga ora ana pilihan kanggo saben paket buku iki utawa seri.
Ayo nambah sawetara printah kanggo nggarap karya kanthi skrip serep kanthi mbukak Serep Sudo Prentah.
# ...
Sawise maneh, ngontrol x kanggo nyimpen.
Saiki kita kudu nindakake konfigurasi wektu kanggo proyek iki. Amarga enggal bakal dadi proyek git, kita ora kudu ngetik saben printah saben wektu kita masang gudang git, nanging kita bakal entuk hang iki nalika nulis skrip penyebaran. Kanggo miwiti, ayo priksa manawa kita ana ing direktori sing bener lan miwiti git gudang lan ngasilake kunci SSH.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Sawise ngetik SSHgen SSH, tombol anyar kudu disimpen ing folder omah ing folder sing diarani .Ssh. Diarani id_rsa.pub. Ayo goleki tombol iki lan nyalin. Kanggo ndeleng,
cd ~
cat .ssh/id_rsa.pub
Salin teks sing dibalekake kanthi printah pungkasan, lan nggawe akun karo panyedhiya git (saenipun GitHub), sadurunge nambah tombol SSH menyang akun sampeyan. Sawise sampeyan duwe akun, klik menu sisih ndhuwur banjur ketik setelan, sadurunge nambah tombol SSH ing tombol SSH ing tombol SSH lan GPG ing menu. Pilih Nambah tombol SSH lan tambahake sampeyan kanthi nempel lan menehi judhul, sadurunge nyimpen lan bali menyang Github kanggo nggawe gudang anyar. Iki padha karo panyedhiya git liyane, sampeyan kudu maca dokumentasi kasebut. Ing konfigurasi gudang anyar, wenehi jeneng deskriptif lan mutusake apa sampeyan pengin nerbitake, lan priksa manawa ora ngatur file kanggo kalebu file. Sawise repositori digawe, nyalin klone nganggo URL SSH, lan tempel menyang printah ing ngisor iki.
git remote add git://… (your remote URL)
Saiki sampeyan bisa pindhah maneh menyang gudang kanthi CD, sampeyan bakal kenal iki. Coba Scripsi serep saiki kanthi serep
Great! Saiki kita bisa njaluk coding. Ayo nginstal Django saiki yen kita duwe apik banget ing Bash lan git. Django bakal ngladeni piranti lunak kanthi otomatis, Bash bisa nindakake kanthi otomatis, nanging Django kudu implementasine luwih aman (bisa dipateni lan dikonfigurasi kanthi gampang).
Kanggo nginstal piranti lunak ing Ubuntu, kita bakal nggunakake Command Sudo Apt-Get. Pisanan, ayo nganyari lan nganyarke piranti lunak sing wis ana. Iki bisa ditindakake kanthi nganyari Sudo Apt-Get lan upgrade upgrade. Sabanjure, ayo nginstal Python lan lingkungan virtual kita, ing omah kode, kanthi printah ing ngisor iki: Sudo Apt-nginstal Python-IS-Python-Venv
Iki kabeh sing dibutuhake kanggo njaluk karo DJANGO ing babagan piranti lunak nginstal ing Ubuntu. Kanggo Windows lan Linux Sampeyan kudu cukup langsung, nanging kanggo Mac Sampeyan pengin nginstal mesin virtual utawa mbayar kanthi nggunakake lingkungan virtual kaya virtualbox utawa recreate ing ndhuwur supaya bisa nyetel lingkungan Ubuntu. Ubuntu kritis ing kasus iki amarga piranti lunak mbukak situs web lan ngidini dadi host situs web karo kabeh piranti lunak sing kasebut.
Ayo digali menyang Django.
Ing direktori kita maneh, kanthi CD:
python -m venv venv # Nggawe lingkungan virtual ing ngendi kode disimpen
source venv/bin/activate # Ngaktifake lingkungan virtual
django-admin startproject mysite . # Ing endi MySite minangka proyek sing aku diwiwiti ing direktori saiki.
Django mung miwiti kita miwiti, amarga Django wis dadi server Web lan nindakake kabeh sing dibutuhake kanggo njaluk situs web dhasar lan mlaku. Saiki kita duwe Django diinstal, ayo sunting setelan rada kanggo nggawe apa sing dibutuhake. Pisanan, ayo nggawe app anyar
python manage.py startapp feed
Sampeyan bakal sok dong mirsani aplikasi pisanan diarani feed. App kudu diarani apa wae sing disenengi, lan kita bakal nggawe aplikasi anyar, nanging jeneng saben app kudu konsisten saben app referensi ing kode kasebut. Kanggo nambah aplikasi anyar, kita mesthi bakal ngowahi setelan.py ing direktori liyane sing digawe app, dijenengi ing StartProject, sawise akhir aplikasi. Nggunakake Nano,
nano app/settings.py
Ing setelan, Temokake Instal lan kapisah ing 3 garis. Nggunakake patang ing garis pusat kosong, tambahake 'feed', utawa jeneng app sampeyan. Bagean ing setelan.py kudu katon kaya:
INSTALLED_APPS = [
'feed',
]
Sadurunge lali, ayo nyoba yen Django lagi makarya. Nggunakake ptython komando ngatur.py runserver 0.0.0.0:8000, kita bisa mbukak server ing web: // localhost: 8000 lan ndeleng server kanthi kontrol c, padha karo printah liyane.
Saiki, ayo digali menyang nulis sawetara kode Python. Django nduwe telung komponen utama, kabeh padha mbukak kode kanthi lengkap. Komponen kasebut diarani model, tampilan lan template, lan saben ana ing tingkat sing luwih dhuwur lan luwih murah sadurunge kaca web dikirim menyang pangguna.
Model kasebut minangka kode sing nyimpen informasi ing database kanggo njupuk maneh, sarujuk lan rendering.
Tampilan kasebut mutusake kepiye model kasebut diwenehake, diapusi, lan diowahi, meh kabeh tampilan bakal nggunakake model langsung.
Cithakan kasebut minangka kode HTML kanthi sawetara lonceng ekstra lan bisik sing diarani basa template. Cithakan kasebut diwenehake dening tampilan ing endi sing diisi karo kode Python kayata Model lan Informasi (senar USUAL lan integer) saka tampilan kasebut.
Django duwe komponen liya, kalebu nanging ora winates:
Setelan, sing ngatur app nalika kita rembugan.
URL, yaiku pola sing bakal digunakake pangguna kanggo entuk bagean khusus ing aplikasi Web.
Formulir, sing nemtokake cara informasi sing dikirim menyang server ditangani lan diwenehake menyang database uga pangguna. Iki minangka dhasar informasi Processing ing sisih server, lan bisa nampa informasi jinis komputer, strings teks paling, lan bener / Booleans (biasane kothak).
Cithakan, sing kalebu kode HTML lan basa template lan jembatan jurang ing antarane Python lan HTML, bisa ngamanake situs web kanthi aksesoris sing bisa diakses ing situs web lan migunani kanggo macem-macem tujuan ing piranti sing adoh sing ora bisa cedhak server.
File statis, sing biasane JavaScript lan perpustakaan sing server lan disambung karo template kasebut.
File media, sing server nglayani utawa ana tuan rumah njaba, utawa mung ditulis menyang server sadurunge diproses lan dikirim menyang server liyane (ember) kanggo hosting.
Middleware, yaiku potongan kode sing padha karo saben tampilan lan dianggep "kalebu" ing tampilan.
Prosesor konteks, sing ngolah konteks saben tampilan lan digunakake kanggo nambah konteks ekstra.
Tes, sing ngesili manawa pangguna utawa panjaluk pass syarat tartamtu sadurunge tampilan diwenehake.
Konsumen, sing ndhikte kepiye websoket sing ngatasi lan nanggapi komunikasi.
Admin, sing digunakake kanggo ndhaptar model supaya bisa diatur kanthi rinci ing kaca admin Django, ing ngendi database bisa ditrapake liwat antarmuka grafis.
Celery, sing nemtokake tugas sing ora seger ing Kode Django bisa miwiti mlaku sadurunge nerusake tugas sabanjure utawa garis kode.
Django bisa duwe komponen liya, sing bakal kita rembug kanthi rinci ing kene. Ana akeh cara kanggo nggawe Django luwih fungsi, nambah Websockets, sing cepet-cepet, saluran komunikasi sing cepet, sing ditindakake dening Django, utamane ing fungsi tampilan, ing endi umume kode ditindakake. Deleng fungsi minangka kunci amarga biasane nyatakake saben kode sing spesifik pola pola URL, utawa bagean server tartamtu.
Pisanan, ayo njelajah fungsi tampilan. Ndeleng fungsi diwiwiti kanthi kode sing ngimpor kode sing bakal digunakake ing tampilan kasebut, lan ditetepake nggunakake definisi utawa kelas biasa. Tampilan paling gampang ditetepake dening fungsi definisi defisisi, lan ngasilake httpreshs kanthi template dhasar. Ayo miwiti kanthi netepake tampilan dhasar kanggo ngasilake teks "Halo World". Elinga saben sampeyan nambahake kode sawise statement kaya def, yen, delok, lsp, sampeyan kudu nambah 4 papan kanggo saben definisi tanggapan sing sampeyan pengin ditrapake kanggo fungsi sampeyan. Kita bakal mlebu apa tegese kabeh.
Saka direktori situs kita, edit file feed / views.py nggunakake Nano lan tambah baris ing ngisor iki ing pungkasan file.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
HuruResponse HuruResponse Django kanthi senar teks, ditandhani kanthi mbukak lan nutup '. Saben sampeyan ngirim informasi menyang fungsi utawa kelas, kaya panjaluk utawa senar, sampeyan kudu nggunakake parenthesis (, mbukak lan nutup).
Iki dudu kabeh sing kudu kita deleng. Mesthi wae, kita durung ngandhani server ing ngendi tampilan persis, kita isih kudu netepake dalan sing kudu ditindakake. Ayo miwiti kanthi nemtokake dalan dhasar ing app / URL.py, lan kita bakal menyang kelompok path mengko.
Ing app / URL.py, tambahake baris sawise pernyataan impor sawise wiwitan ngimpor tampilan sing mung digawe.
from feed import views as feed_views
Saiki, ayo netepake pola tampilan. Pola duwe telung komponen, komponen jalur, sing ngandhani server ing endi tampilan sing ditemtokake ing server kasebut, utamane supaya bisa digunakake kanggo ndeleng lan bisa dianyari kanggo ndeleng liyane utawa nggunakake jeneng liyane sing ora logis. Iki nggawe pangerten nindakake perkara kanthi cara kaya ngono lan fleksibebase bakal dadi lingkungan sing kudu ganti sing mbutuhake fleksibilitas lan improvisasi supaya bisa digunakake lan gampang digarap. Mangkene tampilan sampeyan, sampeyan bisa nambah iki menyang URLPATTRNS = [bagean app / URL.py. Pola tampilan ditetepake karo telung komponen sing diterangake ing ndhuwur, lan fungsi sing diarani path. Pola URL sampeyan minangka dhaptar, dadi priksa manawa sampeyan bakal mungkasi saben item ing wong-wong mau kanthi koma, amarga iki misahake saben wong. Saben item uga kudu pindhah menyang garis anyar, sepisan maneh karo papat ruang sadurunge, kaya app ing Setelan.py. Kita bakal nemtokake komponen pisanan saka tampilan kasebut kanthi fungsi senar kosong, supaya bisa nggawe tampilan sing mlaku ing direktori root server Web. URLs.py saiki kudu katon kaya iki:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Iki minangka dhasar kanggo nggawe situs web karo Django sing wis rampung statis. Kanggo nggawe situs web sing luwih dinamis ing ngendi kita bisa miwiti informasi caching, video, audio lan liya-liyane, kita kudu nggunakake model, sing bakal njelajah sabanjure. Saiki, ayo mriksa kode lan mbukak server. Kanggo mriksa kode kanggo kesalahan, mbukak:
python manage.py check
Yen ana pesen kesalahan, sampeyan kudu mriksa maneh owah-owahan sing digawe ing app lan deleng manawa ana apa-apa sing kudu disetel, kayata karakter ekstra, apa wae sing dibusak, utawa liya-liyane. Wacan liwat pesen kesalahan (yen sampeyan duwe), sampeyan kudu bisa ndeleng dalan menyang file sing digawe utawa diowahi bebarengan karo file lan baris lan liya-liyane, sampeyan bisa ndandani apa wae. Yen sampeyan wis ngrampungake masalah kasebut, bukak perintah ing ndhuwur maneh. Yen piranti lunak wis siyap mbukak lan digunakake, sampeyan bakal bisa ndeleng output "Output" Ora ana masalah. " Saiki sampeyan wis siyap. Bukak server kanthi:
python manage.py runserver 0.0.0.0:8000
Saiki mbukak browser web banjur navigasi menyang http: // localhost: 8000. Sampeyan kudu ndeleng teks sing dibalekake ing parentes lan kuotasi fungsi Httpresponse ing tampilan sampeyan. Iki minangka conto dhasar, nanging yen sampeyan wis entuk iki, sampeyan ngerti dhasar kepiye Linux, Bash, Python, lan Work Django. Ayo digali luwih jero menyang model database, lan njelajah kekuwatan kelas python ing informasi nyimpen informasi. Banjur, kita bakal miwiti genggeman ing HTML lan CSS sadurunge nggawe situs kanthi lengkap, fleksibel lan aman nggunakake javascript lan sinau mesin.
Kelas disimpen ing model.py app sampeyan. Nggunakake Nano, edit app / model.py lan tambah kelas anyar. Kelas ditetepake karo definisi kelas lan wis lulus superclass sing diwarisake, ing model.model kasus iki. Jeneng kelas kasebut sawise definisi kelas, lan sawise definisi kelas A: (kolon) digunakake, sadurunge kawicaksanan lan definisi fungsi sing diikat ing ngisor iki. Kelas kita mbutuhake ID sing bisa digunakake kanggo njupuk maneh lan tetep unik, lan uga butuh kolom teks kanggo nyimpen sawetara informasi. Mengko kita bisa nambah wektu, file, booleans (definisi sing bener utawa wong sing bisa mbantu ngrampungake, lan bisa digunakake kanggo nggunakake model kasebut menyang pangguna, lan liya-liyane. Ayo mbongkar kode ing ngisor iki:
from django.db import models # Impor sing digunakake kanggo netepake kelas lan sifat-sifat
class Post(models.Model): # Definisi kelas dhewe
id = models.AutoField(primary_key=True) # ID model kita, tombol sing digawe kanthi otomatis sing bakal ditindakake kanthi otomatis model kasebut, simpen iku unik, lan migunani nalika kita kudu sesambungan karo model kasebut sawise wis digawe.
text = models.TextField(default='') # Atribusi toko kelas kita, ing kasus iki, sawetara teks, kekurangan menyang senar kosong.
Nutup lan simpen file kaya sing sadurunge rampung.
Ana akeh lapangan lan pilihan liyane sing bakal njelajah nalika nganyari kelas iki minangka app berkembang, nanging iki kabutuhan dhasar kanggo nggawe aplikasi kanggo ngirim teks. Nanging, model iki ora bakal bisa digunakake. Kaya sing diterangake sadurunge, kita butuh tampilan khusus lan pola URL adat kanggo nggawe model iki, lan kita uga bakal mbutuhake formulir bebarengan karo template. Ayo njelajah formulir kasebut dhisik.
Kanggo netepake form, edit aplikasi / Formulir.py karo nano lan tambahake baris ing ngisor iki. Kita bakal mbutuhake loro impor, kelas formulir kita, uga model sing digawe (feed.models.post), definisi kelas padha karo model kasebut, lan lapangan sing diarani meta sing bakal ditetepake model. Formulir kasebut uga bisa duwe fungsi awal sing nyetel adhedhasar informasi ing panjaluk, model utawa liya, kita bakal njelajah mengko.
Bentuk model dadi migunani amarga bisa nggawe model utawa uga ngowahi model, saengga kita bakal nggunakake loro-lorone. Ayo netepake siji ing Forms.py ing ngisor iki.
from django import forms
from feed.models import Post
class PostForm(forms.ModelForm):
text = forms.CharField(widget=forms.Textarea)
class Meta:
model = Post
fields = ('text',)
Iki minangka dhasar lan model apa. Formulir model iki bisa digunakake kanggo instantiate utawa ngowahi postingan, ngganti teks sing ngemot. Kita bakal katon nggabungake formulir iki menyang tampilan sabanjure. Pisanan, ayo pindhah pindhah lan pindhah database supaya kode bisa sesambungan karo model kasebut nalika mlaku. Kanggo nindakake iki, bukak printah ing ngisor iki:
python manage.py makemigrations
python manage.py migrate
Iki bakal sawetara menit kanggo nglakokake, nanging yen wis ngidini sampeyan ngakses model ing tampilan kasebut, utawa ing papan liya ing piranti lunak. Ayo terus kanthi nggawe tampilan ing ngendi kita bisa ndeleng model kita. Owahi feed / views.py lan tambahake kode ing ngisor iki, kaya sing kacathet. Sampeyan ora perlu nambah apa-apa sawise tandha #, kode kasebut yaiku komentar sing digunakake kanggo nuduhake informasi babagan kode kasebut. Kita bakal miwiti kanthi ngimpor model ing tampilan kasebut, lan nambah konteks ing ngendi kita bisa nggawe ing template minangka dhaptar kanggo ditampilake. Sabanjure, kita bakal nambah template ing ngendi kita bisa menehi formulir lan model kanthi tombol kanggo nggawe obyek anyar adhedhasar model kasebut lan dikirim menyang server. Iki muni rumit, mulane mung njupuk langkah-langkah. Sadurunge rampung, ayo nggawe template sing mung nggawe model lan priksa manawa kita bisa ndeleng kanthi nggawe postingan anyar ing cangkang. Mangkene carane ndeleng kudu katon:
posts = Post.objects.all() # Pitakon kabeh kiriman ing database nganti saiki
Iki kabeh katon cukup gampang nganti tekan ngisor. Render, nilai sing dibalekake kanthi fungsi tinimbang nanggepi HTTP kaya conto sadurunge, ing kasus iki, bisa nampa konteks, lan ngasilake konteks, lan ngasilake template ditetepake ing fungsi kasebut. Cithakan kasebut bakal dadi dokumen HTML kanthi sethithik basa sing diarani jinja2, sing menehi informasi python menyang HTML.
Kanggo miwiti nggawe template, nggawe loro direktori ing feed.
mkdir feed/templates
mkdir feed/templates/feed
Sabanjure, sunting template ing direktori ing ndhuwur, feed / templat / feed, lan tambah kode kanggo conto iki. Ayo goleki template kanggo conto iki.
Iki minangka template sing gampang banget. Iki nemtokake tag HTML lan nutup tag HTML, tag jinis dokumen, label awak kanthi judhul legenda, tag sing ana ing layar cilik ing dhaptar kiriman minangka template ing template ing template ing cithakan. Iki kabeh butuh kiriman, nanging ora ana ing database. Ayo nggawe sawetara karo cangkang. Kita bisa mbukak cangkang kanthi ngatur manager.py
python manage.py shell
Saiki, ayo ngimpor model post kita
from feed.models import Post
Sabanjure, kita bakal nggawe kiriman sing gampang nganggo senar lan metu cangkang. Senar bisa dadi apa-apa, yen wis bener teks sing bener.
Post.objects.create(text='hello world')
exit()
Pungkasan, kita kudu nambah pola URL kanggo feed kita. Amarga app feed kita bakal nggunakake pirang-pirang URL lan kita pengin nyimpen ukuran file, ayo nggawe URLs lokal.py ing aplikasi feed kita sing katon kaya iki:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Kita uga kudu ngowahi URL.py ing aplikasi dhasar, apa wae sing kita mutusake kanggo nelpon, iki minangka direktori pertama sing digawe. Edit app / app.py lan tambah ing ngisor iki menyang pola URL
from django.urls import include # Ing sisih ndhuwur
# ... kode sadurunge ing kene
Saiki, nalika mbukak server nganggo Python ngatur.py runserver, kita bakal bisa ndeleng kaca sing digawe amarga kita duwe model, lan uga Cithakan Usl, bebarengan karo item ing database. Sabanjure, ayo ngetrapake formulir sing digawe lan miwiti nggawe kiriman dhewe. Nanging sadurunge nulis kode kakehan, ayo gawe serep nggunakake skrip, kita nulis sadurunge, serep. Bukak skrip iki ing cangkang, ngenteni sawetara wektu, lan kabeh kode bakal digawe serep nganti gudang git kita.
backup
Ngleksanakake formulir kasebut cukup gampang. Kita bakal ngimpor formulir kita, tambahake pawang panjaluk kiriman kanggo ndeleng, lan simpen postingan ing database sadurunge pangalihan menyang tampilan sing padha. Kita bisa nggunakake fungsi pangalihan sing wis diimpor, lan fungsi liyane sing diarani mbalikke kanggo njaluk URL kanggo pola pandeleng. Kita bakal takon karo tali ': Umpan' amarga jeneng pola klebu yaiku feed, lan tampilan kasebut uga diarani feed.
posts = Post.objects.all() # Pitakon kabeh kiriman ing database nganti saiki
if request.method == 'POST': # Ngalahake panjaluk kiriman
form = PostForm(request.POST) # Gawe conto formulir lan simpen data kasebut
if form.is_valid(): # Validasi bentuk
form.save() # Simpen obyek anyar
return redirect(reverse('feed:feed')) # Pangalihan URL sing padha karo panjaluk
'form': PostForm(), # Priksa manawa pass formulir kasebut menyang konteks supaya kita bisa nggawe.
Saiki, kita kudu nganyarake template kanggo akun kanggo formulir anyar. Kita bisa nindakake iki kanthi nggunakake
Ayo ngilangi iki. Ana kelas formulir anyar, token, bentuk kasebut dhewe, lan tombol Kirim. Cantik prasaja, nanging nalika ndeleng, kita bisa uga pengin katon luwih apik. Kerjane, kita bisa ngirim kiriman anyar kanthi formulir lan saiki wis disimpen ing database. Ana sawetara perkara sing kedadeyan ing kene. Kita nggunakake tag HTML kanggo nyatakake yen dokumen kasebut minangka dokumen HTML, kita nggunakake tag template ({% ...%}) kanggo menehi token kanggo wangun, lan liya-liyane, {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {. Kita uga duwe gelung kanggo nggawe teks nggunakake Block tags lan tag cithakan. Tag blok pancen penting amarga kita bisa nemtokake cara bagean saka template kasebut diwenehake karo dheweke, lan tag template minangka dhasar babagan kode kita.
Saiki kita kudu nggawe app kita katon luwih apik, amarga saiki katon dhasar banget. Kita bisa nindakake iki kanthi nggunakake CSS, salah siji inline, utawa ing kelas sing diikat menyang saben obyek ing dokumen kasebut. CSS pancen apik banget amarga ngandhani kabeh ing kaca kepiye kudu katon, lan bisa katon apik banget. Ana sawetara perpustakaan sing bisa nindakake iki, nanging dadi pribadi yaiku Bootstrap.
Bootstrap bisa didownload saka situs web,getbootststrap.com/Waca rangkeng-. Sawise ana, pencet tombol kanggo maca dokumen instalasi, lan nyalin kode saka kalebu liwat bagean CDn. Sampeyan butuh kode iki ing sisih ndhuwur dokumen HTML, ing label sing diarani sirah. Kajaba iku, ayo maju lan nggawe template dhasar saengga kita ora kudu nggawe maneh link kasebut ing saben cithakan.
Gawe direktori anyar sing diarani template karo Mkdir template, banjur sunting template / base.html.
Sampeyan kudu katon kaya iki:
Priksa manawa nyalin CSS lan JavaScript, file .CSS lan .js, amarga kita butuh JavaScript kanggo nggawe situs luwih fungsi ing ngarep.
Saiki, ayo bali menyang cangkang bash lan mbukak printah kanthi cepet. Elinga, yen sampeyan kudu ngakses lingkungan virtual, jinis source velv / bin / aktifake. Iki bakal ngidini sampeyan nginstal paket Python sacara lokal kanthi cara sing ngidini Django ngakses. Kanggo menehi formulir sing digawe saka Kelas Bootstrap Django, kita bakal nggunakake paket Python sing diarani Crispy. Kita bisa ndownload iki kanthi printah ing ngisor iki
pip install django-crispy-forms
Sawise iki wis diinstal, ditambahake menyang setelan.py
# ... kode sadurunge ing kene
Saiki, bali ing template feed kita, kita bisa ngilangi sawetara. Ayo ngilangi wiwitan lan pungkasan dokumen kasebut lan ngganti warisan saka template dhasar, nggunakake lan definisi blok. Uga, kita bakal nambah impor Filter cithakan kanthi beban lan Filter template kanggo formulir kasebut. Pungkasan, ayo nambah kelas Bootstrap menyang tombol ing formulir supaya katon kaya tombol. Sing kudu katon kaya iki:
Ayu! Sing cukup kode wis. Sabanjure, kita kudu nguji lan priksa manawa kita bisa ndeleng manawa kabeh katon apik, lan uga kabeh wis digunakake kanthi bener. Bukak server minangka pandhuan sadurunge lan priksa manawa situs kasebut katon lan bisa ditindakake. Pakaryan gedhe! Sampeyan siap pindhah menyang langkah sabanjure, sing bakal nambah fungsi login pangguna nggunakake url, bentuk, tampilan lan template sing padha. Cithakan berasti penting, lan kita bakal terus ngowahi lan nggawe owah-owahan yen perlu, nanging saiki kudu fokus nggawe situs pangguna kanthi aman, kanthi ngaktifake pangguna kanthi aman lan akun sampeyan bisa diakses kanthi nggunakake sampeyan.
Kanggo nindakake iki, kita kudu nggunakake model pangguna sing dibangun ing Django. Model pangguna minangka model database, kaya postingan kita, sing bisa diwenehake kanggo log pangguna menyang situs web. Ing mangsa ngarep, sadurunge masang situs ing Internet, kita bakal ngluwihi model iki karo model liyane, lan mbangun langkah keamanan tambahan kanggo login sing tahan kanggo phishing. Kita bakal diwiwiti kanthi nggunakake sawetara sing dibangun ing bentuk login sing diwenehake Django. Pisanan, ayo nggawe aplikasi anyar sing bakal digunakake kanggo nggawe template lan tampilan kanggo kaca login dhasar. Kita uga bakal nggawe aplikasi liyane kanggo makili tantangan login sing terus dilanjutake, kalebu pincode, sing dianggep komunikasi rai, piranti eksternal, lan pengakuan bekat.
Kita wis ngomong babagan miwiti app. Saka direktori kita, ing njero lingkungan virtual, pass ngatur.py argumen iki
python manage.py startapp users
Saiki, kita kudu duwe direktori kanggo aplikasi anyar. Ayo miwiti kanthi nggawe tampilan ing direktori kasebut sing cocog karo login pangguna. Django wis dibangun ing tampilan kanggo logins pangguna, nanging iki ora cocog kanggo kita amarga kita butuh tampilan khusus, sing luwih cocog karo definisi.
Ing tampilan iki, kita bakal miwiti kanthi mriksa panjaluk kiriman, pass Panjaluk.post menyang login saka Django sing diimpor saka Django, lan mlebu ing pangguna sadurunge dialihake menyang app feed.
Ing pangguna / views.py, tambahake kode ing ngisor iki
username = request.POST['username'] # Entuk jeneng pangguna lan sandhi saka panjaluk kiriman
password = request.POST['password'] # Keasliane pangguna
Iki kabeh sing dibutuhake kanggo tampilan login dhasar. Saiki, ayo nggawe form kanggo ndeleng template dhasar. Kita bakal miwiti kanthi nggawe direktori anyar kanggo template ing folder pangguna.
mkdir users/templates
mkdir users/templates/users
Saiki, kita kudu bisa ngowahi pangguna / template / pangguna / login.html. Nalika kita ing kene, kita bakal nggawe template kanggo ngidini pangguna uga mlebu.
nano users/templates/users/login.html
Saiki, ing cithakan,
Iki minangka dhasar template login. Pancen kaya template liyane ing struktur, nanging katon beda banget nalika diwenehake. Kita bisa nyalin kode iki kanggo mbangun template liyane sing padha sing diarani registrasi.info, ing ngendi kita bakal ngganti tembung lan nggunakake formulir anyar sing dibangun. Ayo template pisanan. Owahi pangguna / template / pangguna / ndhaptar lan nambah kode ing ngisor iki:
Saiki, ayo mbangun formulir kanggo registrasi pangguna lan bunder bali menyang tampilan sadurunge kita nganyarke logins pangguna kita kanthi model. Kita bakal nggawe dhasar dhasar iki kanggo miwiti, nanging nggabungake rincian liyane lan fitur keamanan kayata perjanjian lan captcha ing mangsa ngarep. Owahi formulir kanthi pangguna / formulir Nano.py, lan tambahake kode ing ngisor iki.
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
Dadi kita duwe formulir liyane ing kene, sing bisa ditindakake kanthi adil. Iki minangka pangguna pangguna pangguna nganggo jeneng pangguna, email lan sandhi, uga kolom sandhi sandhi. Elinga yen formulir iki ora ngluwihi kelas formulir.Mag biasa, iku minangka bentuk model sing tegese duwe meta. Siji lapangan ditetepake mung, lan meta kelas nemtokake model formulir kasebut cocog karo informasi liyane sing bakal ditulis menyang formulir kasebut. Umume sing wis ana ing Django sing dibangun ing Usercreationform, saengga kita bakal nggunakake minangka dhasar kanggo kelas (liwati ing parentes).
Sabanjure, kita bakal mriksa tampilan kanggo ndhaptar pangguna, saiki kudu duwe wujud lan template. Iki minangka modhél, kaya sing ditampilake ing kiriman anyar. Owahi pangguna / Ndeleng.py lan tambahake kode ing ngisor iki:
# ... impor
Iki kabeh sing dibutuhake kanggo pangguna pangguna, nanging kita kudu duwe informasi luwih lengkap. Kita pengin ngerti wektu pangguna sing kadaptar, apa wektu sing terakhir ing situs kasebut, kaya biografi, wektu, lan liya-liyane, kudu nganyari model feed kanggo saben pangguna. Kanggo nindakake iku, kita bakal nganyarake model.py ing kaloro aplikasi. Ayo miwiti kanthi nyunting model feed. Sampeyan kudu katon saiki:
from django.db import models # ... impor
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Tambah ing baris iki
Pay manungsa waé menyang garis kapindho sing ditambahake ing file kasebut. Iki minangka kunci manca, sing bakal ana saben kiriman ing pangguna siji saben kirim, supaya kita bisa nggawe manawa kita nyimpen kiriman kasebut kanthi nggunakake pangguna lan ora bisa digunakake tanpa pangguna. Kita netepake tombol luar negeri iki karo kelas sing diwakili, argumen mbusak kanggo njamin kiriman yen sampeyan bisa ngilangi pangguna, lan jeneng sing gegandhengan, sing bisa digunakake kanggo ngrujuk obyek kiriman pangguna. Jeneng sing gegandhengan iki, ora kaya post.Author, penulis postingan kasebut, menehi pangguna sing ngirim kiriman kasebut. Saiki kita bisa entuk kiriman sing digawe pangguna kanthi mbukak pangguna.Post.Strs.all (), utawa penulis.Post.Post ().
Saiki, ayo padha logins luwih tahan. Kita wis bisa nggawe situs kita luwih gampang rawan karo phishing kanthi mung tingkat mbatesi jumlah kaping, kita bakal bisa mlebu menyang situs kasebut, iki cukup gampang. Ayo uga wiwiti nyimpen sawetara informasi babagan saben pangguna sadurunge nalika terus ngembangake app kita. Pangguna Editing / Model.py, tambahake kode ing ngisor iki.
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, related_name='profile')
account_created = models.DateTimeField(default=timezone.now)
last_seen = models.DateTimeField(default=timezone.now)
can_login = models.DateTimeField(default=timezone.now)
preferred_name = models.CharField(max_length=20,default='', null=True, blank=True)
bio = models.TextField(blank=True, default='')
Elinga yen model iki padha karo model post kasebut. Kita duwe import tambahan, wektu, sing bakal ngidini kita gagal ing lapangan tanggal, lan kita uga duwe karakterfild lan teksfield kaya postingan kasebut. Nggunakake kabeh wektu kasebut mbantu kita ngamanake situs kasebut lan ngerti panggunaan, lan kolom teks supaya informasi nulis babagan saben pangguna, utawa penulis, ing situs web. Onstoonefield mesthine mung siji-sijine pertimbangan bocah cilik, bisa tumindak persis padha karo foreginkey nanging mung siji model sabanjure. Kanthi cara iki, pangguna mung duwe siji profil, nalika bisa uga duwe akeh kiriman.
Saiki, ayo ningkatake login lan tampilan ndhaptar kanggo akun kanggo profil kasebut. Pisanan, Owahi pangguna / Ndeleng.py lan fokus ing Ndeleng Register:
# ... impor
Profile.objects.create(user=user) # Priksa manawa kanggo nambah baris iki, kanggo nggawe profil kanggo pangguna
Iki mung nggawe profil kanggo pangguna, tanpa ngisi informasi kasebut. Saiki, kita pengin nggawe manawa akun pangguna ora bisa login dadi asring, utawa paling ora sandhi ora bisa dicoba, dadi ayo nganyari tampilan login.
# ... impor
if user and user.profile.can_login < timezone.now(): # Elinga yen saiki kita priksa manawa pangguna bisa mlebu
else: # Yen login ora sukses,
user = User.objects.filter(username=username).first() # Iki minangka bagean ing ngendi kita nganyari profil pangguna
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Dadi dheweke ora bisa mlebu maneh sawetara detik
Iki minangka dhasar dhasar keamanan. Priksa manawa situs kasebut ora bisa rawan karo wong sing mung nyoba kabeh kombinasi sandhi, utawa uga sawetara sekaligus. Iki ora bakal frustasi kanggo pangguna biasa sing ngerti kode sandhi lan mung log ing sawetara piranti, nanging bakal tetep akeh robot phishing metu saka app. Elinga yen kita nambahake yen statement kanthi variabel, can_login, sing kudu dadi wektu ing jaman biyen, lan nganyari kanthi login sing ora sukses nggunakake jeneng pangguna sing padha. Kanthi cara iki, pangguna sing mbebayani ora bisa ngira-ngira sandhi ing endi wae sing cedhak karo cepet. Jumlah detik ing tanggal rateTime.Timeedelta () bisa dianyari uga, lan situs web bakal luwih cepet maneh rada ora bisa digunakake kanthi sawetara detik. Aku nyaranake 15 kanggo miwiti.
Elingi, kita mbangun skrip serep kanggo nylametake karya, mula ayo maju lan gawe serep apa sing kudu kita simpen. Nglakokake dhawuhe:
sudo backup
Sawise maneh, iki bakal nylametake gaweyan sampeyan nganti saiki. Aku nyaranake nggawe serep asring kanggo nylametake gaweyan, lan sampeyan bisa uga pengin mbukak proyek serep kanthi otomatis. Sampeyan bisa nindakake iki kanthi nggunakake sarana UNIX sing diarani Cron. Kanggo ngaktifake sarana iki, mbukak printah ing ngisor iki lan ketik sandhi:
sudo crontab -e
Yen sampeyan durung milih Opsi 1 kanggo Nano, editor teks sampeyan kudu wis kenal, lan gulung menyang sisih ngisor file nggunakake tombol panah. Tambah baris ing ngisor iki:
0 * * * * sudo backup
Cron nggunakake format menit, jam, dina wulan, wulan, ing minggu, ing endi a * utawa nomer sing nuduhake nalika mbukak printah kasebut. Nggunakake 0 kanggo menit lan * kanggo sisa pilihan, kita bisa mbukak printah ing menit pisanan saben jam ing wiwitan menit. Iki ngidini kita nggawe serep kode kanthi otomatis. Kabeh pakaryan Cron nalika dileksanakake karo sudo mbukak minangka ROOT, saengga kita ora kudu ngetik sandhi saben jam.
Kanggo luwih gampang kanggo nggawe serep kode tanpa nggunakake sandhi, ayo mateni sandhi kanggo printah serep kita. Kita bakal nindakake iki kanthi nglakokake printah ing ngisor iki lan ngetik sandhi:
sudo visudo
Saiki, ayo gulung menyang sisih ngisor file lan tambahake baris liyane:
ALL ALL=NOPASSWD: /bin/backup
Iki ngidini kita nggawe printah "Gawe serep" minangka pangguna, tanpa tembung sandhi. Format kanggo iki gampang, mung ater-ater garis karo "kabeh = Nopasswd: / bin /" lan mungkasi kanthi printah, kayata / bust / serep, sing ana ing / usr / bin /.
Saiki, ayo miwiti nggarap email. Email pancen penting kanggo situs web, amarga minangka cara kanggo njaga situs web luwih aman, verifikasi pangguna yaiku wong nyata, lan uga produk utawa layanan pasar kanggo pelanggan. Akeh wong sing mriksa Internet mriksa email saben dina, lan nampa macem-macem email pemasaran babagan produk lan layanan sing disenengi. Ana sawetara pilihan nalika menehi email ing situs web Django sing paling apik kanggo sampeyan.
Pisanan, sampeyan bisa mbayar layanan email sing bakal ngidini sampeyan ngirim email saka domain lan mbutuhake kode minimalis. Ana akeh layanan sing nawakake iki, kayata ruang kerja Google, sendinblue, mailgun, lan liya-liyane.
Yen ora, sampeyan bakal nggawe layanan email sampeyan ing server sampeyan saka awal. Aku nyaranake pilihan iki, sanajan luwih akeh kode lan bisa mbutuhake hosting khusus. Sampeyan ora bakal bisa miwiti server mail saka komputer paling mungkin, mula ayo maju lan mriksa konfigurasi lan kode kanggo ngirim email sadurunge miwiti server ing méga lan nggawe server mail dhewe.
Pisanan, ngowahi setelan.py karo printah ing ngisor iki:
nano app/settings.py
Ngendi app minangka jeneng app sing digawe karo StartApp.
Tambah baris ing ngisor iki:
SITE_NAME = 'Django App'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = username@server.com'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)
Priksa manawa sampeyan wis siyap kanggo nginstal app, kita bakal maneh maneh mengko. Email_address kudu dikirim email sing pengin dikirim, lan sandhi (email_host_password) kudu disetel menyang sandhi sing sampeyan pilih kanggo server. Aku mbukak sandhi saka file config kanggo njaga kode nggunakake logika ing ngisor iki, ing ndhuwur garis kasebut ing Setelan.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Banjur, aku wis nyiyapake file JSON kanthi config ing /etc/config.json nggunakake nano kaya ing ngisor iki.
Kanggo ngowahi File:
sudo nano /etc/config.json
Tambah baris ing ngisor iki:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Kita bakal terus ngedit file config lan tambahake kabeh sandhi lan tombol sing bakal digunakake ing app. Saiki, ayo mriksa kanthi cepet babagan ngirim email nggunakake Python. Pisanan, ayo nggawe cithakan kanggo email verifikasi sing bisa dikirim menyang pangguna, lan lebokake ing direktori template pangguna. Cithakan iki bakal ditulis ing HTML.
nano users/templates/users/verification_email.html
Email iki cukup sederhana. Sampeyan butuh konteks pangguna, URL basa kanggo situs, lan ID pangguna lan token sing digunakake kanggo verifikasi email pangguna. Priksa manawa kanggo netepake URL basa ing Setting.py sadurunge nulis sawetara kode Python kanggo menehi template kasebut. Terusake lan tambahake baris ing ngisor iki kanggo app / Setting.py, sing cedhak.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Pungkasane, nalika situs sampeyan wis siyap kanggo Internet lan sampeyan bakal nemtokake, sampeyan pengin nemtokake domain minangka jeneng domain sing sampeyan tuku kanggo makili situs kasebut. Iki jeneng sing bakal sampeyan ngetik ing Navbar supaya bisa ngakses situs sampeyan. Saiki, sampeyan bisa ninggalake blangko domain utawa gunakake. Sampeyan uga pengin ngganti site_name menyang jeneng sing pengin diwenehake situs, saka milih sampeyan.
Sadurunge ngirim email, ayo nggawe generator token supaya kita bisa entuk token aktifitas akun sing ora bakal entek. Kita bisa nindakake iki kanthi mbangun lan ngimpor token aktifitas akun sing katon kaya ing ngisor iki. Owahi file:
nano users/tokens.py
Tambah kode ing ngisor iki:
from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six
class TokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
six.text_type(user.pk) + six.text_type(timestamp)
)
account_activation_token = TokenGenerator()
unsubscribe_token = TokenGenerator()
Generator tonen dhasar iki ngasilake token, kita bisa ngirim pangguna ing URL lan pangguna bisa digunakake kanggo verifikasi email lan ngaktifake akun kasebut.
Sabanjure, ayo goleki email. Nggunakake Nano, sunting pangguna / Email.py.
nano users/email.py
Ngirim email HTML verifikasi bakal katon kaya iki:
from django.contrib.auth import get_user_model
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.core.mail import EmailMultiAlternatives
from django.shortcuts import render
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.template import Template, Context
from django.conf import settings
import traceback
def send_verification_email(user):
User = get_user_model()
mail_subject = '[{}] Activate your account.'.format(settings.SITE_NAME)
html_message = render_to_string('users/verification_email.html', {
'user': user,
'domain': settings.DOMAIN,
'protocol': 'https',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
send_html_email(user, mail_subject, html_message)
Iki cukup prasaja. Kita ngimpor fungsi sing kudu dikirim email, menehi email nganggo template, lan setelan, banjur kita nemtokake email ing jeneng template lan dikirim menyang pangguna kanthi nggunakake fungsi. Sampeyan bakal sok dong mirsani Kita durung netepake fungsi kasebut kanggo ngirim surat kasebut kanggo ngirim email, nanging, mula, supaya nulis ing ngisor iki ing kode kita sing wis ditambahake menyang pangguna / email.py
def send_html_email(user, mail_subject, html_message):
to_email = user.email
username = user.username
if to_email == '':
return None
unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
html_message = html_message + "<p><a href=\"" + unsub_link + "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
msg.attach_alternative(html_message, "text/html")
profile = user.profile
try:
msg.send(fail_silently=False)
if not profile.email_valid:
profile.email_valid=True
profile.save()
except:
profile.email_valid=False
profile.save()
Iki rada kompleks, lan kita durung siyap mbukak kabeh kode iki. CATETAN Kita netepake unsub_link, link pangguna bisa digunakake kanggo langganan email kita. Iki penting, amarga pangguna kudu bisa milih metu saka email kajaba pengin ndeleng, sawayah-wayah. Uga nambah alternatif teks kanggo pesen kita, yaiku pesen HTML sing ditarik tag HTML. Pungkasan, kita priksa manawa email sing dikirim, lan yen ora, kita tandhani ing profil pangguna manawa email ora bener.
Ayo pindhah menyang model pangguna supaya kita bisa nggawe kabeh karya. Kita kudu netepake fungsi kanggo ngasilake link kanggo langganan, lan netepake lapangan boolean kanggo menehi tandha manawa email pangguna ora bener.
Pisanan, tambahake impor ing ngisor iki menyang sisih ndhuwur pangguna / model.py
nano users/models.py
# ...
Sabanjure, ayo nambah fungsi kanggo model pangguna supaya token lan priksa token sing digunakake kanggo ngaktifake email, uga pangguna kanggo nyimpen apa pangguna bisa nampa surat. Ing pangguna / model.py maneh, tambahake kode ing ngisor iki nganti pungkasan model (kode inden)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Bener kanggo 30 dina
Iki cukup prasaja, kita nggunakake TimesTampsigner, yaiku alat kriptografi dhasar, kanggo nggawe token sing bakal entek sawise sawetara wektu, lan kita uga nggunakake fungsi liyane kanggo mriksa manawa bener. Kita nggunakake token kasebut kaping pindho, sapisan kanggo verifikasi email, lan sapisan kanggo link langganan.
Saiki kita duwe, pungkasan karya sing kudu ditindakake yaiku ing tampilan kasebut. Ing pangguna / Ndeleng.py, ayo nambah tampilan kanggo verifikasi alamat email, lan ora langganan.
nano users/views.py
Pisanan, tambahake impor ing ngisor iki. Aku mbuwang sawetara tambahan supaya kita ora kudu ngimpor barang maneh mengko.
from .email import send_verification_email # Priksa manawa kanggo ngimpor fungsi ngirim email verifikasi
Sampeyan bisa uga wis duwe sawetara impor kasebut, nanging ora babras kanggo mbaleni maneh. Sampeyan kudu ngimpor fungsi ngirim email verifikasi, uga akun account_activation_token saka pangguna.Token, ing antarane impor liyane.
Saiki, ing sisih ngisor file, tambahake kode ing ngisor iki:
# langganan dheweke
# Yen ora pangalihan menyang kaca login
# SendwelcomeEmail (Panjaluk, Panganggo)
Iki akeh kode. Ayo mudhun mudhun. Fungsi pisanan, resik lan prasaja, unsubscribe pangguna saka dhaptar mailing. Fungsi nomer loro ngaktifake email kasebut, lan sampeyan bakal bisa ndeleng aku nambah fungsi singomentasi, SendwelcomeEmail. Sampeyan welcome nggunakake template email lan definisi fungsi kanggo ngirim email sambutan, aku durung nate. Fungsi pungkasan aku mbuwang penting, amarga email aktifitas kadaluwarsa. Mula, kita kudu menehi ulang email aktifitas kanggo sawetara wektu. Kita bisa nggunakake formasi dhasar kanggo iki, lan nelpon fungsi kanggo ngirim email verifikasi. Sadurunge nindakake iki, mesthekake yen wis dikirim dhisik, kanthi nambahake panggilan fungsi menyang tampilan registrasi. Tambah baris iki sadurunge pangalihan ing Ndaftar Register, daftar def Def, ing pangguna / ndeleng.py.
nano users/views.py
# ... (Sawise) Def Def Register (Panjaluk):
# ... (sadurunge) pangalihan (
Sampeyan ora perlu nambah garis pisanan lan pungkasan ing potongan kode kasebut, priksa manawa dhaptar reguler ngirim email verifikasi menyang pangguna. Sampeyan kudu katon kaya iki:
# ... impor
send_verification_email(user) # Priksa manawa kanggo nambah baris iki!
Saiki, kita kudu nambah formulir kanggo menehi ulang email aktifitas. Ing pangguna / Formulir.py, tambahake formulir ing ngisor iki:
# ... (impor)
Kita uga kudu cithakan sing cocog karo formulir Aktivasi Email iki. Ayo golek template iki ing. Owahi file:
nano users/templates/users/resend_activation.html
Sabanjure, tambahake kode ing ngisor iki menyang file.
Whew, sing akeh! Saiki, nalika masang kode menyang server kita, kita bakal bisa ngirim email email lan ngaktifake akun pangguna kanthi klik ing email. Kita uga pengin ngirim email sambutan sing gampang, mula ayo goleki kepiye carane. Bali ing pangguna / Email.py, tambahake kode ing ngisor iki:
def sendwelcomeemail(user):
User = get_user_model()
html = open('{}/users/welcome_email.html'.format(settings.BASE_DIR)).read()
subject = 'Welcome to ' + settings.SITE_NAME + ', {{ username }}!'
template = Template(html)
subjtemplate = Template(subject)
context = Context({'username': user.username, 'base_url': settings.BASE_URL, 'model_name': 'Daisy Holton, 'site_name': settings.SITE_NAME})
renderedtemplate = template.render(context)
subjcontext = Context({'username': user.username})
subjrenderedtemplate = subjtemplate.render(subjcontext)
send_html_email(user, subjrenderedtemplate, renderedtemplate)
Uga, kita butuh template kanggo menehi informasi kabeh iki. Ing situs web, cithakan kasebut katon kaya ing ngisor iki, nanging sampeyan tampi format nanging sampeyan seneng.
Elinga, kita ora duwe tag awak utawa HTML tag, amarga nambahake nalika nambah link HTML. Iki penting, nanging kita ora pengin netepake kaping pindho.
Dadi apa sing sabanjure? Kita wis teka kanthi dawa. Pancen, kita kudu siap masang situs menyang server. Kita bisa nambah dekorator @Login_Requowed lan nggawe tampilan sampeyan aman, njupuk signup pangguna, Kirim email, lan informasi cache, sing kudu ditindakake situs web kanggo tetep relevan. Kita bakal nambah sawetara fitur sing luwih migunani, banjur gawe dhasar kanggo nyepetake kode kita menyang server remot, nyetel server mail, konfigurasi domain, cocog.
Kita uga butuh tampilan ngreset sandhi, mula tambah cepet. Django dibangun ing tampilan reset sandhi wis rusak ing sawetara fungsi, nanging kita bakal bisa nulis tampilan dhewe, template email, formulir, formulir, lan pola URL. Mangkene apa tampilan tampilan, ing pangguna / views.py
# ... impor
Formulir iki dibangun ing Django, nanging kita mbutuhake template kanggo konfirmasi reset sandhi, pangguna / template / pangguna / sandi_reset_confirm.html
Kita uga duwe template kanggo ngirim email reset sandhi, kanthi wujud sing gampang, ing pangguna / template / pangguna / sandi_reset.html
The template for the email itself is simple, it is a basic HTML file rendering a link to reset the password, in users/templates/users/password_reset_email.html. Django kanthi otomatis bakal nerjemahake file iki.
Kita uga kudu loro template liyane. Sing pertama yaiku konfirmasi manawa email wis dikirim. Tampilan kanggo iki wis ana ing Django, mula kita mung kudu ngatasi dheweke ing URLs.py. Cithakan iki dumunung ing pangguna / template / pangguna / sandi_reset_done.html
Lan Pungkasan, kanggo ngonfirmasi manawa ngreset sandhi lengkap, pangguna / template / pangguna / sandi_reset_complete.html
Saiki, kita kudu pola URL kanggo tampilan kasebut. Ing pangguna / URL.py, tambahake pola URL ing ngisor iki:
# ... URL sadurunge kene
Papat template, sing akeh! Nanging saiki kita bisa yakin manawa bisa ngreset sandhi pangguna kapan wae sing dibutuhake, kabeh saka browser Web.
Aku ngerti iki akeh kode. Yen misale jek sethithik liwat sirah, ora apa-apa. Sampeyan bakal bisa nambah, pangerten sampeyan bakal nambah, lan sampeyan bakal luwih kompeten karo kode cepet banget. Yen sampeyan wis ilang, aku nyaranake supaya bisa bali menyang piranti lunak iki mengko sawise kerja kanthi mandhiri sinau kode kursus kanthi online. Iki biasane gratis kanggo miwiti, lan bakal nuntun sampeyan liwat kabeh sing dibutuhake supaya bisa sukses nalika sampeyan bali menyang proyek iki. Yen sampeyan rumangsa wis siyap, waca, sabanjure, kita bakal nutupi kode sampeyan menyang server sing adoh lan uga bisa nggunakake proyek anyar kanthi sawetara printah sing gampang.
Wangsulan: Bab ingkang pungkasan sing kudu ditindakake sadurunge nginstal server remot yaiku nggawe situs kita luwih aman. Sampeyan bakal weruh manawa tampilan login mung njupuk jeneng pangguna lan sandhi, lan ora ana informasi bukti asli utawa siji wektu. Iki gampang ndandani, lan kanthi kode sing padha, kita bisa nggawe situs iki ngirim pesen teks lan malah responsif kanggo pesen teks sing dikirim menyang server. Kanggo miwiti, kita bakal bali menyang model pangguna lan tambahake signer timstamp sing bakal makili saben mlebu. Kita uga bakal nambah pengenal sing unik, muter kanggo model pangguna sing bakal digunakake kanggo nambah keamanan tambahan kanggo login. Ngedit model pangguna, pangguna / model.py, tambahake kode ing ngisor iki:
# Priksa manawa kanggo ngimpor Signer, generator Timestampur lan URL (mbalikke)
# Tambah kode iki ing kene
# Lan Tambah Fungsi Iki
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Valid kanggo 3 menit
Priksa manawa pangguna / model.py katon kaya ngono, saliyane komentar (kode ing garis kanthi #). Mudhunake iki, iku gampang. Kita duwe sawetara impor, tim kaping wektu yaiku sarana kriptografi sing bisa ngasilake kode sing aman lan verifikasi supaya bisa bener, lan ora luwih tuwa tinimbang sawetara detik. Kita uga nggunakake UUID, yaiku pengenal unik sing ngenali pangguna ing tandha token, lan ing URL ing endi token dikirim menyang pangguna. Kita bakal nggunakake kriptografi dhasar iki kanggo nggawe tampilan bukti asli loro. Sadurunge nindakake apa-apa, ayo mbukak migriby supaya model pangguna kita dianyari. Ing direktori kanthi ngatur manager.py, bukak printah ing ngisor iki kanggo nggawe lan ngrampungake migrasi.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Iki penting amarga saben sampeyan nggawe pangowahan kanggo model kasebut, kita kudu nggawe tabel lan nganyari database kanthi gawan sadurunge bisa nggunakake model kasebut.
Sabanjure, ayo improvise tampilan login kita kanggo pangalihan tampilan bukti asli sekunder. Ing pangguna / Ndeleng.py, copot fungsi Login lan pangalihan URL sing wis digawe ing model pangguna.
# ... impor
if user and user.profile.can_login < timezone.now(): # Elinga yen saiki kita priksa manawa pangguna bisa mlebu
# Copot fungsi Auth_Login sing ana ing kene
return redirect(user.profile.create_auth_url()) # Cathetan kita pangalihan URL anyar ing kene
else: # Yen pangguna ora nggunakake bukti asli multi-faktor, mung mlebu.
else: # Yen login ora sukses,
user = User.objects.filter(username=username).first() # Iki minangka bagean ing ngendi kita nganyari profil pangguna
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Dadi dheweke ora bisa mlebu maneh sawetara detik
Dadi iki cukup prasaja, saiki kita duwe cara kanggo pangalihan kanggo tampilan bukti asli loro nalika nggawe. Kita uga duwe fallback yen pangguna durung nambah nomer telpon. Kita bakal nambah tampilan dhasar kanggo nambah nomer telpon mengko lan mlebu kanthi pesen teks enggal.
Pisanan, kita kudu cara sing gampang kanggo ngirim pesen teks saka kode kita. Kanggo nindakake iki, kita bisa milih saka sawetara Apis, nanging sing paling gampang kanggo mratelakake panemume yaiku twilio. Dheweke uga menehi rega sing apik kanggo proyek sing luwih cilik, uga diskon akeh. Gawe akun ing twilio.com, isi sawetara rincian babagan proyek sampeyan, tuku nomer telpon, lan nyalin tombol API menyang setelan sampeyan. Banjur, tambahake kode iki ing file, pangguna / sms sms.py.
nano users/sms.py
# Ngimpor kabeh paket sing dibutuhake
# Kode iki ngirim teks kanthi twilio
# Fungsi helper kanggo entuk nomer kanthi akeh digit
# Kirimake teks kanggo verifikasi pangguna
# Kirimake pangguna apa wae karo fungsi iki
# Ngresapke kode kanthi fungsi iki
# Validasi wektu
Priksa manawa kanggo ngganti setelan kanthi tepat, nambah garis kasebut kanthi tombol:
# Priksa manawa kanggo nyalin saka Dashboard Twilio
AUTH_VALID_MINUTES = 3 # Cacahe menit saka kaca TFA aktif yen wis diresiki
Pisanan, kita butuh formulir kanggo tampilan bukti bukti bukti loro kita. Pangguna Editing / Format.py, Tambah kode ing ngisor iki.
# ... impor
# Formulir kanggo ngetik nomer telpon
# Bentuk kanggo bukti asli
Sabanjure, ayo nggawe tampilan pangguna / Ndeleng.py
# ... impor
Kita uga kudu template kanggo loro-lorone. Ayo nambah Cithakan MFA dhisik.
nano users/templates/users/mfa.html
Tambah kode HTML iki kanggo Cithakan
Iki minangka panjelasan sing apik banget. Formulir ngirim kode utawa kode kosong, lan sampeyan bakal weruh ing tampilan kita ngirim kode yen kita nampa kode kosong. Banjur kita mung duwe rong tombol kiriman, lan kanthi cara iki kita bisa ngirim kode kanthi tombol. Sabanjure, kita bakal nambah formulir sing gampang kanggo nambah nomer telpon.
nano users/templates/users/mfa_onboarding.html
Tambah HTML ing ngisor iki:
Formulir iki luwih gampang, mung nggawe formulir nomer telpon sing digawe lan ngidini pangguna nambah nomer telpon.
Iki katon apik banget! Anggere kabeh wis disiyapake kanthi bener, kita kudu bisa ngirim pesen, lan log pangguna nganggo nomer telpon sanalika kita nambah pola URL. Wangsulan: Bab ingkang pungkasan sing kudu disiyapake yaiku tampilan profil supaya kita bisa nggawe pangguna bisa ngganti nomer telpon tanpa mlebu. Uga pangguna, supaya pangguna bisa teks "Stop" kanggo milih pesen teks ing mangsa ngarep.
Ayo nambah tampilan profil menyang pangguna / ndeleng.py.py. Tampilan iki bakal nganyari Bio, email, jeneng pangguna pangguna, lan nomer telpon, uga ngidini kita ngaktifake bukti asli faktor. Pisanan, kita butuh rong formulir ing pangguna / Format.py
# ... impor
Sabanjure, kita bisa nggawe tampilan kanggo nggunakake loro-lorone formulir kasebut. Owahi pangguna / Ndeleng.py lan tambah tampilan.
# Tambah impor kasebut
Kita uga butuh template kanggo tampilan iki.
nano users/templates/users/profile.html
Sampeyan bakal weruh iki minangka wujud sing cukup prasaja, nanging duwe sawetara JavaScript ing kanthi otomatis kiriman konten kaya sing dianyari. Iki migunani kanggo duwe, dadi sampeyan bisa nggawe suntingan tanpa kudu dipencet saben-saben.
Sabanjure, kita butuh URL sing makili kabeh tampilan kasebut ing patter URL pangguna. Owahi pangguna / URL.py lan tambahake kode iki:
# ... kode sadurunge, impor
# ... Pola URL sadurunge mlebu, tambahake telung baris sabanjure
Saiki minangka wektu sing apik kanggo nyoba proyek kita. Nanging dhisik, ayo mbukak serep liyane.
backup
Lan mbukak server. Sadurunge masang server Linux, apike ngaktifake rong bukti asli ing akun kasebut. Kita bakal nindakake URL Profil, / Pangguna / Profesional /, lan mriksa kothak supaya bukti asli sawise ngetik nomer telpon, banjur ngirim formulir.
python manage.py runserver localhost:8000
Dolan maring kaca web kanthi pindhah menyang browser web, aku nggunakake Google Chrome ing conto iki, lan ngetik URL HTTPS: // localhost: 8000 / Akun / profil /
Sampeyan bakal bisa mlebu yen prelu lan ngaktifake rong bukti asli loro.
Proyek iki butuh server supaya bisa mbukak kanthi bener. Nanging pisanan, kita butuh cara kanggo ndeleng kesalahan. Sampeyan bakal sok dong mirsani yen sampeyan mbukak server ing mode debug, kanthi Setelan.debug padha karo sing bener, server nuduhake kesalahan kanthi otomatis. Kanggo nuduhake kesalahan tanpa nggunakake mode debug, sing ora aman ing server produksi, kita kudu nambah tampilan kanggo. Kesalahan sing paling penting sing kudu kita tindakake yaiku:
ERROR 500 - Masalah karo kode kita Kesalahan 404 - Kaca sing ora ditemokake (URL rusak) Kesalahan 403 - ijin nolak kesalahan
Ayo nambah aplikasi anyar kanggo ngatasi kasalahan kasebut, sing diarani kesalahan.
python manage.py startapp errors
Tambah iki menyang setelan.py kaya sing sadurunge, ing setelan sing dipasang ing instal, lan wiwiti kanthi nambah referensi kanggo sawetara tampilan ing app / URL.py, ing ngendi app sampeyan minangka jeneng proyek DJANGO sampeyan.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Iki kabeh sing dibutuhake saliyane views kesalahan, template lan sethithik sakdurunge. Ayo dadi netepake sing kaya ngono:
# Gawe pandangan sampeyan ing kene.
Sabanjure, ayo netepake tandha tengah kanggo ngatasi kasalahan kasebut. Kita bakal nindakake iki kanthi nambahake ing MiddlerWare_classes ing Setelan.py, kanthi jeneng ing middlerware.
# ... Sadurunge Middleware
Sabanjure, ayo nambahi papan tengah.
from threading import local
import traceback
from django.utils.deprecation import MiddlewareMixin
_error = local()
class ExceptionVerboseMiddleware(MiddlewareMixin):
def process_exception(self, request, exception):
_error.value = traceback.format_exc()
def get_current_exception():
try:
return _error.value
except AttributeError:
return None
def set_current_exception(exception):
try:
_error.value = exception
except AttributeError:
print('Attribute error setting exception.')
Kita nambah fungsi kanggo entuk pengecualian saiki kanthi nggunakake benang lokal, sing mbantu kita nglacak kesalahan ing kode kita. Ing babagan template, kita mung butuh siji, amarga kita dinamis netepake judhul ing tampilan kasebut. Cithakan mung kudu menehi judhul lan "tilak", kesalahan kita tiwas saka konteks.
nano errors/templates/errors/error.html
Iki minangka cithakan sing paling gampang, nanging kanthi gampang kanggo ndeleng kesalahan ing proyek kita. Sabanjure, ayo mateni debug ing setelan.
nano app/settings.py
Temokake garis iki ing endi sing ditetepake kanggo bener, lan ganti dadi palsu
DEBUG = False
Terusake lan serep app saiki. Kita siyap kanggo masang server Linux sing adoh, lan tetep nambah fitur saka ing kana.
sudo backup
Sadurunge ngirim kode iki menyang server, kita kudu nganggep manawa ana sawetara masalah karo kode kasebut. Gumantung saka kasus kasebut, situs sing nampa informasi sing dikirimake kanggo dheweke bakal duwe masalah karo Spam sing dikirim lan angel ngilangi spam. Iki ora bakal kelakon langsung, nanging yen kedadeyan, kita bakal bisa mriksa carane kanthi otomatis spam ing situs kasebut kanthi otomatis ing situs iki lan verifikasi manawa robot kasebut kanthi otomatis kanggo ngakses situs pangguna utawa scan saka driji utawa fristion.
Ndelok conto bukti bukti bukti asli faktor sing diteliti, ing produksi, kedadeyan bisa beda. Wigati kepiye kita mbayar logins, lan token kadaluwarsa. Yen robot ngakses situs, loro bukti asli faktor bisa luwih angel amarga bisa ngetik kode ing wektu sing padha. Kanggo pertempuran iki, ayo nggunakake model ing model pangguna, nyatakake kepiye sesambungan karo situs kasebut nalika kita wis asli nggunakake bukti asli faktor kanthi nomer telpon. Kita uga bakal nambah pilihan kanggo keasliane karo email. Miwiti kanthi nyunting model pangguna karo Nano.
nano users/models.py
Iki minangka model sing kita lakoni. Kita ora butuh cara, mung variabel kanggo nyimpen ID, pangguna, wektu, kadaluwarsa, dawa, lan nyoba nglawan bukti asli faktor (kode kaya 123456 sing dikirim menyang telpon utawa email).
# Tandha dhasar sing digunakake kanggo mlebu menyang situs web
Ayo uga nambah hak istimewa kanggo pangguna, lan kita bakal nyetel kanthi manual saiki, sadurunge pungkasane pindah kanggo ndeleng pangguna kanthi otomatis. Ing model pangguna, tambahake garis iki ing profil:
vendor = models.BooleanField(default=False)
Kaya owah-owahan kanggo database, kita kudu nggawe migrasi lan pindhah database nalika sampeyan ngowahi file model.py ing Django. Elingi, kanggo nindakake iki nggunakake sumber dhisik (yen durung digunakake wiwit terminal mbukak) banjur Python ngatur.py kanggo nggawe migrasi lan pindhah.
cd project-directory-you-named # (Yen dibutuhake)
Saiki, sampeyan bisa ndhaptar akun sing wis digawe minangka vendor kanthi nggunakake cangkang.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Saiki, ayo ngembangake tampilan bukti asli faktor faktor kanggo nggunakake token iki. Pisanan, kita kudu ngowahi keperluan pembelisan MFA. Nggunakake Nano,
nano users/mfa.py
from django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken
account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER
def send_text(target_phone, text):
from twilio.rest import Client
try:
client = Client(account_sid, auth_token)
if len(target_phone) >= 11:
message = client.messages.create(
to=target_phone,
from_=source_phone,
body=text + ' Text STOP to cancel.')
except:
messages.warning(get_current_request(), 'There was an error sending the message.')
print(traceback.format_exc())
def get_num_length(num, length):
n = ''
for x in range(length):
n = n + str(num)
return int(n)
def send_verification_text(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))
def send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
def send_user_text(user, text):
send_text(user.profile.phone_number, text)
def check_verification_code(user, token, code):
token.attempts = token.attempts + 1
profile = user.profile
result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
if token.attempts < 3 and result:
profile.verification_code_length = 6
elif token.attempts > 1 and not result:
profile.verification_code_length = profile.verification_code_length + 2
if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
token.save()
profile.save()
return result
# Keasliane pangguna nggunakake email utawa nomer telpon
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filter token kanthi regane sing diliwati URL (a Uuid)
if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # Yen sesi iki durung digawe, gawe
user = User.objects.filter(id=token.user.id).first() # Entuk pangguna saka token
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Yen dheweke wis keasliane, mlebu ing
if not user: raise PermissionDenied() # Nolak yen ora ditemokake pangguna
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Priksa token auth
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Mlebu pangguna yen durung mlebu
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Setel kadaluwarsa ing bukti asli faktor
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Pangalihan pangguna menyang kaca sabanjure
if not user.profile.mfa_enabled: # Priksa manawa MFA diaktifake
if not check_verification_time(user, token): # Priksa wektu
user.profile.mfa_enabled = False # Mbusak nomer telpon
user.profile.enable_two_factor_authentication = True # Ngaktifake mfa
user.profile.phone_number = '+1' # Pateni nomer telpon
user.profile.save() # Simpen profil kasebut
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log pangguna yen mfa ora diaktifake
if request.method == 'POST' and not fraud_detect(request, True): # Yen panjaluk kasebut minangka panjaluk kiriman
form = TfaForm(request.POST) # Instantiate bentuk
code = str(form.data.get('code', None)) # Entuk kode kasebut
if code and code != '' and code != None: # Priksa manawa ora kosong
token_validated = user.profile.check_auth_token(usertoken) # Priksa token auth
is_verified = check_verification_code(user, token, code) # Priksa kode kasebut
if token_validated: # Yen kabeh
if is_verified: # Yaiku supaya
user.profile.mfa_enabled = True # Ngaktifake MFA (yen durung aktif)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Mlebu pangguna
for key, value in request.GET.items(): # Mbangun querystring kanggo parameter sabanjure (yen ana)
return HttpResponseRedirect(next) # Pangalihan
elif not token_validated: # Yen token ora bener
if p.mfa_attempts > 3: # Yen ana akeh upaya
if form.data.get('send_email', False): # Kirim email (utawa teks)
# Nerjemahake formulir (kanggo njaluk panjaluk)
Yen kita nambahake ing kode iki, priksa manawa mbusak fungsi kasebut kanggo ngirim email. Ing sisih ndhuwur file, pangguna tampilan (karo impor liyane), tambahake
from .mfa import send_verification_email as send_mfa_verification_email
Saiki, kita kudu nulis fungsi kasebut sadurunge bakal bisa digunakake. Sampeyan kudu ngluwihi fungsi email Kirim kita, lan mung kirim email menyang pangguna kanthi kode verifikasi.
nano users/mfa.py
def send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
Dadi kabeh iki bisa digunakake, saiki kita duwe sistem bukti asli faktor sing gumantung karo nomer telpon utawa email kanggo mlebu. Nanging kita uga butuh cara kanggo mbusak, utawa paling ora ndhelikake pangguna sing ora kerja sama karo istilah kita. Iki bisa dadi spammer, robot utawa sapa wae sing ora ateges kerja. Priksa tampilan kanggo ngawasi pangguna ing situs webku:
# impor
from .tests import is_superuser_or_vendor # Kita kudu nggawe tes iki
# Entuk dhaptar pangguna
return render(request, 'users/users.html', { # Wangsul pangguna ing template
Elinga yen kode iki nggunakake tes, kita kudu nyatakake tes iki ing file tes.py lan ngimpor. Pangguna / tes nyunting.py, ayo nyoba.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Iki magepokan karo pangguna / pangguna.html template, sing katon kaya iki:
Elinga yen template kalebu template liyane, pangguna /pangguna.html. Nalika nggunakake template sing duwe subtemplate lan ora nggunakake, apike kanggo nambah undercore () Sadurunge jeneng file kanggo ngluwihi, supaya mbedakake template.
Elinga yen iki akeh jebu, sampeyan ora duwe variabel kabeh sing ditetepake. Nanging iki kaya kodeku.
<small># {{User.id}} </ cilik>
Kita uga butuh subtemplate liyane, Toggle_AtIve.html. Cithakan iki kudu dadi wujud sing ngidini kita milih apa pangguna aktif.
Kita uga kudu nambah tampilan kanggo milih kegiatan pangguna, lan pola URL sing cocog. Nalika kita ana ing kene, ayo nambah tampilan kanggo mbusak pangguna yen kita butuh.
# Impor
success_url = '/' # Pangalihan ing URL Sukses
def test_func(self): # Tes yen pangguna luwih gampang lan duwe idin kanggo mbusak
Nalika iki praktis yen perlu, mbusak pangguna ora perlu umume wektu, kita mung bisa milih visibilitas pangguna sing ngunjungi situs kasebut yen kita kudu ngilangi.
Pola URL sing ditambahake katon kaya iki. Kanthi Nano, sunting pangguna / URL.py lan tambahake garis kasebut:
nano users/urls.py
Garis kasebut kudu mlebu dhaptar dalan ing pangguna pangguna, sadurunge pungkasan "]" Nanging sawise wiwitan "[".
# ...
# ...
Saiki, priksa manawa nggawe serep situs supaya sampeyan bisa download ing server Web Kita bakal terus digunakake. Saka baris printah,
sudo backup
Saiki situs iki wis digawe serep.
Dadi saiki kita duwe sawetara fitur sing luwih migunani. Nanging babagan gambar gedhe ing kene? Kode iki isih ora bisa diakses saka Internet, durung ana server mail, lan kita kudu nggedhekake aplikasi kanggo nambahi proses verifikasi lengkap uga tata letak lancar kanggo mbantu kita njelajah pangguna sing aman.
Kita bakal entuk kabeh iki. Sing paling penting saiki bakal entuk kode iki kanthi online, sing bisa kita lakoni kanthi sawetara garis bash ing server Ubuntu. Sampeyan kudu nyewa server kanggo iki, kajaba sampeyan duwe server ing omah lan langganan Internet Bisnis sing ngidini sampeyan mbukak port. Aku pribadi mbukak situs web ing HP Z440 sing diinstal ing apartemen, nanging biasane luwih murah kanggo kudu dhasar kanggo nyewa server pribadi virtual (VPS).
Elinga yen kode sing wis digunakake saiki wis tipis, mula kudu dijaga lan apik sadurunge kita siyap nggunakake apa sing kudu digunakake kanggo nggawe produk. Priksa manawa sampeyan kudu ngati-ati karo Internet, priksa manawa sampeyan masang situs iki kanthi umum ing web ing server Linux, sampeyan duwe rencana kanggo ngalangi interaksi sing ora dikarepake karo situs web sampeyan. Iki bisa uga ora dadi masalah ing wiwitan, nanging kita bakal bisa ndeleng macem-macem solusi kanggo nglawan iki, kalebu belajar mesin, kalebu kacathet mesin, intelijen buatan lan sesanti komputer. Yen wis dadi masalah, katon luwih ing teks iki kanggo solusi.
Ing segi sewa vps, ana akeh papan sing bisa sampeyan lakoni. Google Cloud duwe server VPS, ionos, kamatera, Amazon AWS, lan liyane panyedhiya nawakake solusi server awan sing bakal cocog karo kabutuhan.
Sampeyan kudu ngeklik formulir lan pilih rencana kanggo miwiti. Sampeyan bisa mbukak rencana dhasar karo panyedhiya, nanging priksa manawa sampeyan mbukak port server port Mail kanggo ngirim email (iki kudu port 587 lan port 5), sawetara panyedhiya mblokir port kasebut. Nganti saiki aku duwe pengalaman paling apik karo Ionos lan Kamatera, loro kasebut bakal ngidini aku ngirim email tanpa watesan lan rega sing murah.
Sampeyan bakal nyambung menyang server anyar sampeyan liwat protokol sing diarani SSH utawa Nihan Shell, sing ngidini sampeyan antarmuka sing adoh karo server kanthi gampang karo server pribadi, saka komputer pribadi. Nalika sampeyan nyiyapake server, panyedhiya hosting kamungkinan njaluk sampeyan nambah tombol SS, utawa bakal menehi jeneng pangguna lan sandhi. Tombol SSH yaiku carane sampeyan bakal mlebu menyang server saka baris komando kanggo ngowahi kode kasebut. Gunakake opsi ssh-keygen ngisor kanggo ngasilake tombol SSH.
ssh-keygen
Simpen file lan overwrite yen sampeyan butuh, becik muter tombol SSH yen sampeyan durung. Saiki, sampeyan bisa nggunakake printah ing ngisor iki kanggo ndeleng tombol SS sampeyan. Sampeyan pengin nyalin menyang server remot supaya sampeyan bisa nggunakake bukti.
cat ~/.ssh/id_rsa.pub
Yen sampeyan ora bisa ndeleng tombol SSH nalika ngetik printah kasebut (tali sing dawa saka angka lan huruf sing diwiwiti karo "SSH-rsa AAA"), coba golek kunci ing ngisor iki, mula aku luwih aman, mula aku luwih aman.) Kode ing ngisor iki bakal ngasilake tombol 4096 SH.
ssh-keygen -t rsa -b 4096
Gawe VPS sing mbukak Ubuntu, nanging sampeyan pengin nindakake iki. Sawise sampeyan nggawe VPS kanthi ngeklik formulir ing situs web panyedhiya (peratera.com, ionos.com utawa padha), sampeyan pengin mlebu. Kanggo nindakake XXx.xx.xx). Sampeyan uga kudu sensitif marang jeneng pangguna gawan ing server sing digawe, contone, Ubuntu.
ssh ubuntu@XX.XX.XX.XX
Sampeyan bisa uga dijaluk sandhi, yen dijaluk sandhi, ketik. Kita ora nggunakake jeneng panganggo gawan, mula kudu miwiti nggawe pangguna anyar lan nambah kunci SSH menyang akun kasebut.
Ayo miwiti kanthi nambah file sshd_config anyar, sing ngandhani server cara nggunakake SSH.
nano sshd_config
# Iki minangka file konfigurasi sistem-stars-sudhut SSHD Stere. Ndeleng
# sshd_config (5) kanggo informasi luwih lengkap.
# SSHD iki disusun kanthi path = / usr / lokal / sbin: / usr / local / sbin: / usr / bin: / sbin: / usr / game: / usr / game
# Strategi sing digunakake kanggo pilihan ing Sshd_Config gawan sing dikirim
# OpenSsh yaiku nemtokake pilihan kanthi nilai standar ing endi
# bisa, nanging tinggalake komentar. Pilihan sing ora dikepengini
# Nilai standar.
# Port 22
# Addfamily Sembarang
# Listenaddress 0.0.0.0
# Listoaddress ::
# Hostkey / etc / ssh / ssh_host_rsa_key
# Hostkey / etc / ssh / ssh_host_ecdsa_key
# Hostkey / etc / ssh / ssh_host_ed25519_key
# Ciphers lan keying
# Rekeylimit gawan ora ana
# Logging
# Auth Syslogfacility
# Info logLevel
# Bukti asli:
# Logingracetime 2m
# DinSrootlogin Larangan-Sandi
# Iya mulya ya
# Maxaututhtries 6
# MaxSessions 10
# Nyana .ssh / sah_keys2 supaya ora diabaikan kanthi gawan ing mangsa ngarep.
# AuthlinedPrincipalsfile Ora Ana
# Ora ana sing ora ana
# Sinau wewenangManduser ora ana
# Kanggo bisa digunakake, sampeyan uga butuh kunci host ing / etc / ssh / ssh_known_hosts
# Hostbbasenthentifation No
# Ngganti ya yen sampeyan ora dipercaya ~ / .ssh / dikenal_hosting kanggo
# HostbBasenthentifation
# NglirwakakeususkullhostS ora
# Aja maca pangguna ~ / .rantu lan ~ / .Shost file
# Ngelingi Ya
# Kanggo mateni sandhi teks sing jelas, ganti ora ana ing kene!
# Permitemptypasswass NO
# Owah-owahan kanggo ngaktifake sandhi-respon-respon-respon (duwe masalah
# Sawetara modul PAM lan benang)
# Pilihan Kerberos
# Kerberosauthentication No
# KerberosorLocalPasswd ya
# KerberastikKetTraAnup ya
# Kerberosgetsafstoken no
# Pilihan GSSAPI
# Gssapiautikasi no
# GSSAPIGECAANUPCREDENTENTENTENTENTENTENALTION YES
# Gssapistricctorcheck ya
# Gsapeyanexchange no
# Setel iki kanggo 'ya' kanggo ngaktifake bukti asli paman, pangolahan akun,
# lan pangolahan sesi. Yen iki diaktifake, bukti asli Pam
# diijini liwat kbdinteractiectionikasi lan
# Sandhangan. Gumantung ing konfigurasi pam sampeyan,
# Authentication Pams liwat KBdinteractiectiectional bisa uga lulus
# Setting "ijinkuTlogin tanpa tembung sandhi".
# Yen sampeyan mung pengin akun Pam lan sesi sing bakal ditindakake tanpa
# Autitif Pam asli, banjur aktifake iki nanging nyetel sandi sandhi
# lan kbdinteractiectiveAuthentication to 'no'.
# AllowArArforfarding Ya
# Ngidinitcpforaring ya
# Gatewayports ora
# X11displayoflset 10
# X11uselocallhost ya
# Ngidinake Ya
# Printlastlog ya
# Tcpkeepalive ya
# Ndhaptar Ora
# Kompresi tundha
# Klienaliveinterval 0
# Klienalivecountmax 3
# Digunakake ora
# Pidfile /Run/Sshd.Pid
# Maxstartups 10: 30: 100
# Ndhaptar Ora
# Chrootdirectory Ora
# VersiSaddendum Ora Ana
# Ora ana dalan spanduk standar
# Ngidini klien kanggo ngliwati variabel lingkungan sing lokal
# override gawan ora ana subsystem
# Tuladha babagan Overriding Setting kanthi basis saben pangguna
# Match anoncvs pangguna
# X11forward ora
# Allowtcpforwarding NO
# Ngidini ora
# Server CVS Forcecommand CVS
Elingi, CTRL + X lan Y kanggo nyimpen file kasebut. Sabanjure, ayo nulis skrip dhasar sing diarani miwiti wiwitan (kabeh ing direktori omah gawan pangguna).
nano initialize
Tambah garis kasebut ing file kasebut, ganti
# ! / bin / bash
Kanggo mlaku sampeyan liwat file iki, ayo miwiti baris miturut baris. Garis pertama ngandhani kompiler manawa iki minangka skrip bash. Banjur kita nginstal dependensi, nyalin sshd_config menyang direktori sing bener, ngasilake SSH tombol, nggunakake jeneng pangguna '(sampeyan bisa milih jeneng pangguna kanthi jeneng lan sandi sandi saiki). Kita uga nambah tim menyang klompok sudo, ngasilake tombol SSH, nambah kunci kanggo tombol sing sah lan dadi uga, lan cetak tombol. Pangguna anyar iki bakal kepiye cara mlebu ing situs kasebut.
Ing terminal anyar, go mbukak maneh server maneh.
ssh team@XX.XX.XX.XX
Sampeyan ora kudu tembung sandhi wektu iki, amarga sampeyan duwe tombol SSH. Kita uga wis mateni login nganggo sandhi supaya situs luwih aman.
Saiki, server iki diwiwiti kanthi lengkap kosong tanpa informasi. Ayo miwiti kanthi cloning proyek kita saka git saengga kita bisa download lan mbukak ing mesin remot. Ing remot server sing nyambung karo SSH, nyithak pisanan SSH sampeyan:
cat ~/.ssh/id_rsa.pub
Sabanjure, tempel tombol iki menyang setelan git kaya sadurunge kita nyiyapake gudang git kita. Saiki kita bisa uga clone proyek kasebut langsung menyang server. Priksa manawa sampeyan wis nggawe serep proyek kanthi sacara umum supaya ing server Git kanggo download.
git clone git://github.com/you/yourproject.git
Sampurna. Saiki kabeh file ing kene. Kita bisa ndeleng dheweke karo ls
ls
Saiki, ayo miwiti nyiyapake server. Pisanan, nyalin direktori proyek sampeyan menyang jeneng sing gampang, ora bisa dilalekake, kita bakal nggunakake proyek kasebut.
cp -r yourproject whatyoucalledit
Ing endi "apa apa jeneng anyar proyek sampeyan. Sabanjure, kita kudu mbangun sarana dhasar kanggo nyiyapake server. Kita bakal nylametake sarana iki lan nggunakake ing ngarep. Kanggo mbangun sarana iki, ayo nggawe binar pangguna kanggo nemtokake cara nyunting skrip. Nggunakake Bash, Edit / USR / BIN / ASCRIPT
sudo nano /usr/bin/ascript
Priksa manawa sampeyan nggunakake sudo ing kana supaya sampeyan ijin kanggo ngowahi file kasebut. Ing file kasebut, tambahake garis kasebut:
# ! / bin / bash
echo "# ! / bin / bash ">> / usr / bin / $ 1
Elinga skrip iki njupuk argumentasi, jeneng skrip, minangka $ 1. Kaping pisanan, yen file ana, utawa liya-liyane, nambahake baris pertama kanggo nyatakake skrip kasebut yaiku, banjur nambahi Ijin, lan nambahake ijin, lan nambahi jeneng skrip sing ditindakake. Yen file wis ana, mung ngganti ijin lan sunting. Simpen file kasebut, lan sabanjure kita bakal ngganti Ijin. Anggere kita nggunakake skrip iki, kita ora kudu nglakoni maneh.
sudo chmod a+x /usr/bin/ascript
Sampurna. Saiki ayo nggawe skrip sing disebut persiyapan. Pisanan, ora kanggo ngatasi sampeyan, nanging priksa apa sing katon kaya skrip persiyapan. Kita bakal ngliwati apa sing katon skrip iki ing proyek sampeyan, sampeyan ora mbutuhake kabeh ing skripku kanggo miwiti.
# ! / bin / bash
# skrip / skrip / pangguna
# ./scripts/usersetup
# SSH-keygen
# Direktur Proyek
# Log
# Nano Concig
# Git Config
# Nganyari lan nginstal
# Ngaktifake Flamav Antivirus
# Setel Jeneng Hostname
# Passup passup
# Gawe serep database persiyapan
# Pateni IPTABLES
# Instal BitDefender
# PostFix persiyapan
# Nggawe DIR
# Persiyapan Vertauenv
# Entuk lan mbangun dependensi
# Setel aturan firewall
# Instal Pypi Pyipi
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Pip Instal OpenCV-Python == 4.5.5.64
# Pip Instal OpenCV-Kontrib-Python == 4,5.5.64
# Pasang CertiBot
# Run cerbot
# Reload Mail Server
# Salinan Copy
# sudo cp /etc/lett/live/fembabe.com/privkey.pem privkey.pem
# sudo cp /etc/lett/live/femmebabe.com/cert.pem cert.pem
# Patch venv
# Setel setelan pangguna
# Setel Ijin
# sudo chown tim tim: Pangguna / var / Run /
# ROOT chrow root: ROOT / Run / sudo / ts -r
# sudo chmod 664 db.sqlite3
# sudo mall www-data: Pangguna DB.SQLite3
# Salin Confic lan Set Ijin
# Database persiyapan
# Nyuntik config lan mbusak faulty ssh
# Sudo Sed -i '' -e '$ D' /etc/pam.d/sshd
# Sudo Sed -i '' -e '$ D' / etc / Profil
# Nyalin skrip BIN lan atur ijin
# Gawe maneh lan ngaktifake layanan
# Aktifake modul apache
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_refork
# Pateni situs gawan
# Ngaktifake situs kita
# Reload Daemon lan miwiti maneh Apache, postfix lan OpenDkim
# Setel Ijin
# Konfigurasi Swap
# Mesin Captionit
# Persiyapan git
# Tampilake IPv6 lan OpenDkim Kanggo Konfigurasi Domain
# Persiyapan rampung
Sing akeh persiyapan! Singkat, printah log kode iki, ngatur nano lan git, salinan liwat file, ngaturake database, ngaturake database, ngaturake sertifikat, ngatur sertifikat, ngatur sertifikat, ngatur sertifikat, banjur nyetel server, nginstal Konfigurasi, diwiwiti lan ngaktifake Sever, Allocates swap, nyetel ijin, lan nyithak IP, IPv6 alamat lan OPENDKIM. Cukup prasaja, nanging katon akeh kode. Kita ora butuh akeh iki amarga kita ora duwe katergara, kita ora nggunakake celery, celeryBeat utawa Daphne, nanging kita bakal nginstal sawetara wong-wong mau kanggo miwiti. Wigati manawa kode iki duwe domain sing diumumake kaping pirang-pirang.
Kita uga kudu tuku jeneng domain (yaiku biaya saben taun). Aku nyaranake Squarespace kanggo tuku domain, tata letak kasebut intuisi lan gampang digunakake. Sampeyan bisa tuku domain apa wae sing dipilih, nanging aku nggunakake domain femmebabe.com ing conto iki. Sawise sampeyan tuku domain, Kepala menyang panel Konfigurasi Squarestpace DNS banjur tambahake rekaman sing nuduhake domain menyang server kanthi alamat IP. Sampeyan kudu katon kaya iki:
@ A xx.xx.xx.xx
Kanthi Operator minangka host, tegese kabeh subdomain ing domain iki lan domain root kabeh bakal pangalihan menyang server. Ana luwih cathetan kanggo nyatakake, nanging kita bisa maju ing wektu iki, kita siyap ngirim surat. Elinga, bisa uga mbutuhake sawetara dina sadurunge sampeyan bisa ngirim email saka server. Rekaman DNS We are setelan bakal entuk wektu kanggo nyebarake.
Oalah, siji-sijine rekaman sing kudu diwiwiti yaiku rekaman. Dadi saiki kita bisa ngisi skrip ing ngisor iki miturut proyek kita lan mbukak.
Ayo miwiti kanthi skrip persiyapan sing luwih cilik kanggo nginstal apa sing dibutuhake kanggo kemajuan dhasar. Kita ora bakal nggunakake akeh katergantungan utawa postgreSQL durung, kita mung bakal miwiti server dhasar HTTP lan kuwatir kanggo nyatakake yen wis rampung. Elinga, kanggo njaluk sertifikat HTTPS lan mbukak server kanthi aman, kita kudu tuku domain bebarengan karo nyewa server. Saiki, Ganti "Tim" ing file iki kanthi jeneng pangguna, "dir" karo direktori proyek sampeyan, lan nyuplai email lan domain ing <> tag.
Kajaba iku, sadurunge kita nglakokake kode iki, kita kudu ngganti setelan ing firewall The Preiding Hosting ndhukung, yen ana. Biasane iki ana ing tab 'Network' panyedhiya sampeyan, utawa yen sampeyan hosting dhewe, ing bagean 'Port Forward' saka rute sampeyan. Sampeyan uga pengin nyiyapake IP statis liwat dalan sampeyan kanthi alamat mesin server, yen sampeyan nggunakake hosting. Sampeyan kudu mbukak port ing ngisor iki kanggo akses maca / nulis.
22 (SSH) 25 (mail) 587 (Mail) 110 (klien mail) 80 (http) 443 (https)
# ! / bin / bash
# Log
# Nano Concig
# Git Config
# Nganyari lan nginstal
# Ngaktifake Flamav Antivirus
# Setel Jeneng Hostname
# Gawe serep database persiyapan
# Pateni IPTABLES
# Persiyapan Vertauenv
# Pasang CertiBot
# Run cerbot
# Setel setelan pangguna
# Setel Ijin
# sudo chown tim tim: Pangguna / var / Run /
# ROOT chrow root: ROOT / Run / sudo / ts -r
# Gawe maneh lan ngaktifake layanan
# Aktifake modul apache
# Reload Daemon lan miwiti maneh Apache, postfix lan OpenDkim
# Tampilake IPv6 lan OpenDkim Kanggo Konfigurasi Domain
Sadurunge nglakokake kode iki, priksa manawa domain sing sampeyan tuku wis nyambung menyang server. Kanggo nindakake iki, bukak terminal ing mesin lokal, lan mbukak printah iki karo domain sampeyan:
ping femmebabe.com # Pasang domain ing kene, sawise ping
Yen kabeh katon apik lan server ngirim tanggapan, kita siyap mbukak skrip lan nginstal paket uga wiwitan, aktifake lan netes server APACHE.
Iki ora kabeh persiyapan sing dibutuhake kanggo ngatur postfix, kita bakal katon ing persiyapan kasebut mengko. Saiki, nglakokake kode persiyapan iki lan butuh sawetara menit kanggo nginstal lan menehi sertifikasi server. Sawise maneh, priksa manawa ngganti jeneng, email lan jeneng domain ing skrip miturut jeneng sing dituku.
Saiki server kasebut disedhiyakake, sampeyan bisa menyang URL ing browser Web lan mriksa kanggo mesthekake manawa server mlaku HTTPS. Yen ora, coba ngenteni sedhela kanggo cathetan DNS kanggo nyekel lan banjur mbukak printah ing ngisor iki kanggo sertifikasi cerbot cerbot:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Anggere sampeyan wis ngatur kabeh kanthi bener, sampeyan kudu bisa ngakses kaca gawan Apache: Kanggo ngerti kode sampeyan bisa digunakake lan nampilake kaca web sing urip. Sabanjure, ayo ngedit setelan.py kanggo ngganti mode debug standar kita kanggo produksi. Kita uga bakal ngatur domain ing setelan, uga IPS internal.
nano yourproject/settings.py
Ing setelan, ganti / tambahake garis kasebut.
# Konfigurasi Situs
Saiki, kita kudu ngatur Apache2. Ayo sunting file config Kita bakal masang garis iki:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
File Config Konfigurasi iki kudu duwe jeneng domain, lan jeneng pangguna lan proyek. Aku nggunakake jeneng domain Femmebabe.com, tim jeneng pangguna, lan jeneng proyek Femmebabe.
ServerSignature Off
ServerTokens Prod
<IfModule mod_ssl.c>
<VirtualHost *:80>
Redirect permanent / https://femmebabe.com/
</VirtualHost>
<VirtualHost *:443>
ServerName femmebabe.com
ServerAdmin team@femmebabe.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/team/femmebabe/static
<Directory /home/team/femmebabe/static>
Require all granted
</Directory>
Alias /media/icons /home/team/femmebabe/media/
<Directory /home/team/femmebabe/media>
Require all granted
</Directory>
<Directory /home/team/femmebabe/femmebabe>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/team/femmebabe/femmebabe/wsgi.py
WSGIDaemonProcess femmebabe python-path=/home/team/femmebabe/ python-home=/home/team/femmebabe/venv header-buffer-size=100000000000 user=team
WSGIProcessGroup femmebabe
WSGIApplicationGroup %{GLOBAL}
<Directory /home/team/femmebabe/static>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} \.(css|webp|webm|gif|png|mp3|wav|jpeg|jpg|svg|webp)$ [NC]
RewriteCond %{HTTP_REFERER} !^https://femmebabe.com/media/.*$ [NC]
RewriteRule ^(.+?)/$ /media/$1 [F,L]
</IfModule>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/femmebabe.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/femmebabe.com/privkey.pem
Header set X-Frame-Options: "SAMEORIGIN"
Header set Access-Control-Allow-Origin "https://femmebabe.com"
TimeOut 60000
LimitRequestBody 0
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|webp|JPG|JPEG|wav|mp3|mp4|public|js|css|swf|webp|svg)$">
Header set Cache-Control "max-age=30, public"
</FilesMatch>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName femmebabe.com
ServerAdmin team@femmebabe.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =femmebabe.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>
Priksa manawa kanggo ngganti jeneng proyek kasebut, direktori, lan domain ing kode conto iki nalika ngatur server. Saiki, kita kudu mateni situs standar. Iki bisa ditindakake kanthi nggunakake Bash.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Sabanjure, kita bisa ngaktifake situs gawan lan nambah maneh Apache2, uga nggunakake Bash. Elinga ngganti femmebabe kanthi jeneng file sing diomongake nalika nyunting ing / lsp / Apache2 / Situs sing kasedhiya /.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Bali menyang domain ing Navbar. Sampeyan kudu ndeleng situs sing dikonfigurasi ing browser web sampeyan. Sugeng! Yen sampeyan ora ndeleng, sampeyan bisa uga kudu ngowahi sawetara. Kanthi ati-ati babagan setelan ing Proyek, Konfigurasi Apache, lan priksa manawa sampeyan ora duwe kesalahan, lan mbukak printah ing ngisor iki kanggo mriksa proyek kasebut kanggo kesalahan.
cd projectname
source venv/bin/activate
python manage.py check
Yen sampeyan duwe kesalahan ing proyek Python sampeyan, tracer menyang papan kasebut lan didandani. Sampeyan bisa uga ora bisa ndeleng kabeh kesalahan sampeyan gumantung ing ngendi, dadi yen sampeyan duwe kesalahan sing ujar "populate ora reentrant", ngowahi file ing ngisor iki ing lingkungan virtual, pendaptaran.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Gulung menyang LINE 83, ing endi kesalahan runtime iki diunggahake (ngunggahake RUNTimeError ("Populate () ora reentrrror")), lan nambahake komentar sadurunge, banjur nambah, kanthi dhasar, lan liyane. Iki katon kaya iki:
# Nyegah Telpon Reentrant kanggo Ngindhari Appconfig.re ()
# cara kaping pindho.
# RuntimeError ("Populate () ora reentrant")
Sampeyan banjur bisa mriksa proyek kasebut maneh lan mbabarake kesalahan.
python manage.py check
Banjur sampeyan bisa ndeleng kesalahan lan ndandani. Yen sampeyan wis tetep lan kode kompilasi ora ana kesalahan, priksa manawa sampeyan bakal bisa ngganti file kasebut kaya iki:
# Nyegah Telpon Reentrant kanggo Ngindhari Appconfig.re ()
# cara kaping pindho.
# mandhiri.app_configs = {}
Diwenehi server online, nalika kita ngganti maneh, kita kudu nggunakake printah ing ngisor iki kanggo nambah maneh server:
sudo systemctl reload apache2
Apik tenan! Nanging apa babagan ngirim email? Kanggo miwiti ngirim email, kita kudu nganyari konfigurasi domain. Iki kudu ana ing Panel DNS ing Squarespace, utawa apa wae pendaftar jeneng domain sing dipilih. Kita uga kudu nginstal lan nambah konfigurasi, lan mbukak sawetara printah.
Pisanan, ayo entuk alamat IPv6 server. Kita banjur bakal mbukak DNS lan tambahake cathetan kasebut.
Kanggo entuk alamat IPv6 IPV6 server, gunakake printah iki:
ip -6 addr
Saiki, kita bisa nambah cathetan ing ngisor iki menyang setelan DNS. Cathetanku katon kaya iki. Nanging, kanggo cathetan sampeyan, sampeyan kudu ngganti alamat IP nganggo IP sampeyan (ora 7547.182.214, iku tambang). Also add your domain in place of femmebabe.com, as well as your IPV6 address found with the previous command (you can't use mine, fe80::725a:fff:fe49:3e02). Aja kuwatir babagan domainkey saiki, iki digawe nalika nyiyapake postfix, server mail, kanthi Opendkim, lan nyithak tombol. Kita bakal ngatur pungkasan iki.
@ A N / a 75.147.182.214
@ Mx 10 femmebabe.com
@ PTR N / a femmebabe.com
@ Txt N / a Txt @ v = spf1 mx ip75.147.182.214__IP6: FE80 :: 725A: FFF: FE49: 3E02: 3E02 ~ kabeh
Default.Bimi Txt N / a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
_dmarc Txt N / a v = dmarc1; p = ora
sendonly._domain
Txt
N / a
Saiki, kita kudu nambah sawetara konfigurasi sing terus-terusan kanggo postfix. Kabeh sing kudu ditindakake yaiku nggawe manawa kita ngganti jeneng domain, femmebabe.com, kanthi jeneng domain sing digunakake. Ayo goleki kabeh file config siji-siji, lan nginstal ing direktori sing diarani config ing proyek kita, kanggo nginstal OS.
nano config/etc_postfix_main.cf
Tambahake teks iki menyang file
# Deleng /usr/Share/postfix/main.Cf.dist kanggo komentar, luwih lengkap
# Khusus Debian: Nemtokake jeneng file bakal nyebabake pisanan
# baris file kasebut kanggo digunakake minangka jeneng. Default De Debian
# yaiku / etc / mail.
# Myorigin = / etc / mailname
# sadar .Domain minangka tugas mua.
# Garis sabanjure kanggo ngasilake "peringatan" "
# tundha_warning_time = 4h
# Deleng http://www.postfix.org/Compatibil_Readme.html - Default 36 ON
# nginstal seger.
# Paramèter TLS
# Konfigurasi Milter
Mbusak sabanjure!
nano config/etc_postfix_master.cf
Tambah garis kasebut:
#
# Berkas Proses Konfigurasi Proses PostFix. Kanggo rincian format kasebut
# File, deleng kaca Manual Master (5) (printah: "Man 5 Master" utawa
# On-line: http://www.postfix.org/master.5.html).
#
# Aja lali nglakokake "postFix Reload" sawise nyunting file iki.
#
# ================================================================
# Layanan Jenis Layanan Unpriv Chrobo Wakeup Maxproc + Args
# (ya) (ya) (ora) (ora) (100)
# ================================================================
# SMTP INET N - Y - 1 POSTCREEN
# SZTPD Pass - - Y - - SMTPD
# DNSBlog Unix - - Y - 0 DNSBlog
# Tllspoxy Unix - - Y - 0 tlsproxy
# Pilih Salah: Ngaktifake kiriman kanggo klien loopback mung, utawa kanggo klien apa wae.
# 127.0.0:Subsion Inet N - Y - - SMTPD
# -O syslog_name = postfix / kiriman
# -o smtpd_stls_security_level = Encrypt
# -o smtpd_sasl_Auth_enable = ya
# -o smtpd_tls_Auth_only = ya
# -o smtpd_recj_unlisted_reCipiates = ora
# -o smtpd_client_restricy = $ maa_client_restricy
# -o smtpd_helo_restricy = $ mua_helo_restricy
# -o smtpd_senderder_restriction = $ mua_sender_restriction
# -o smtpd_restrication =
# -o smtpd_restricy = ijin_sasl_Authenticated, nolak
# -O Milter_Macro_daemon_name = Asal
# Pilih Salah: Ngaktifake SMTPS kanggo klien loopback mung, utawa kanggo klien apa wae.
# 127.0.0.1::STMTPS INET N - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -O syslog_name = postfix / smtps
# -o smtpd_tls_wrappermode = ya
# -o smtpd_sasl_Auth_enable = ya
# -o smtpd_recj_unlisted_reCipiates = ora
# -o smtpd_client_restricy = $ maa_client_restricy
# -o smtpd_helo_restricy = $ mua_helo_restricy
# -o smtpd_senderder_restriction = $ mua_sender_restriction
# -o smtpd_restrication =
# -o smtpd_restricy = ijin_sasl_Authenticated, nolak
# -O Milter_Macro_daemon_name = Asal
# 628 inet n - Y - - QMQPD
# qmgr unix n - n 300 1 oqmgr
# -O smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
#
# ===========================================================
# Antarmuka kanggo piranti lunak non-postifik. Priksa manawa kanggo mriksa manual
# Halaman saka piranti lunak non-postifik kanggo ngerteni pilihan apa sing dikarepake.
#
# Akeh layanan ing ngisor iki nggunakake pipo postfix (8) pangiriman
# agen. Deleng pipa (8) wong lanang kanggo informasi babagan $ {panampa}
# lan opsi amplop pesen liyane.
# ===========================================================
#
# Maildrop. Deleng file postfix maildrop_Readme kanggo rincian.
# Uga nemtokake utama.cf: maildrop_destination_repipit = 1
#
#
# ===========================================================
#
# Versi Cyrus pungkasan bisa nggunakake entri master.CF sing wis ana.
#
# Nemtokake ing Cyrus.conf:
# LMTP CMD = "LMTPD -A" LCLEHOST = "localhost: lmtp" proto = tcp4
#
# Nemtokake ing Main.cf siji utawa luwih saka ing ngisor iki:
# kothak layang_transport = LMTP: Inet: localhost
# Virtual_transport = LMTP: Inet: localhost
#
# ===========================================================
#
# CYRUS 2.1.5 (Amos Gouaux)
# Uga nemtokake ing Main.cf: Cyrus_destination_rapticipient_rimait = 1
#
# Cyrus Unix - N N - - Pipa
# Gendéra = Panganggo Drx = Cyrus Argv = / Cyrus / bin / ngirim -r $ {pangirim $ {extension} $ {pangguna}
#
# ===========================================================
# Tuladha lawas kiriman liwat Cyrus.
#
# lawas-cyrus unix - n n - - pipa
# Gendéra = r pangguna = cyrus argv = / Cyrus / bin / ngirim -m $ {extension} $ {User}
#
# ===========================================================
#
# Deleng file postFix UUCP_README kanggo rincian konfigurasi.
#
#
# Cara pangiriman eksternal liyane.
#
Lan konfigurasi OpenDkim. Opendkim ngenali server email kanthi tombol domain supaya luwih aman. Yen ora, mail ora mlebu lan ora bisa mlebu ing kothak mlebu.
nano config/etc_default_opendkim
Tambah garis kasebut:
# CATETAN: Iki file konfigurasi warisan. Sampeyan ora digunakake dening OpenDkim
# Layanan System. Mangga nggunakake paramèter konfigurasi sing cocog ing
# /etc/Opendkim.conf tinimbang.
#
# Biyen, siji bakal ngowahi setelan gawan ing kene, lan banjur nglakokake
# /lib/Opendkim/Opendkim.service.Generate kanggo ngasilake file override sing digunakake ing
# /etc/systemd/system/Opendkim.service.D/override.conf lan
# /etc/tmpfiles.d/OpendKim.conf. Nalika iki isih bisa, saiki
# Disaranake kanggo nyetel setelan langsung ing /etc/Opendkim.conf.
#
# Daemon_opts = ""
# Ngganti / var / spool / postfix / Run / OpenDkim kanggo nggunakake soket unix kanthi
# postfix ing chrot:
# Rundir = / var / spool / posfix / run / opendkim
#
# Romasan kanggo nemtokake soket sulih
# Elinga yen setelan iki bakal ngatasi nilai soket ing Opendkim.conf
# Default:
# Rungokake kabeh antrian ing port 54321:
# Soket = inet: 54321
# Rungokake Loopback On Port 12345:
# Soket = inet: 12345 @ localhost
# Rungokake 192.0.2.1 ing port 12345:
# Soket = inet: 12345@192.0.1
nano config/etc_dovecot_conf.d_10-master.conf
Tambah garis kasebut:
# Default_Process_limit = 100
# default_client_limit = 1000
# Default vsz (ukuran memori virtual) watesan kanggo proses layanan. Iki utamane
# dimaksudake kanggo nyekel lan mateni proses sing bocor sadurunge mangan
# Kabeh.
# Default_vsz_limit = 256m
# Pangguna login digunakake ing njero login kanthi proses login. Iki sing paling ora dipercaya
# pangguna ing sistem dovecot. Sampeyan ora duwe akses menyang apa wae.
# Default_Login_user = Dovenull
# Pangguna internal digunakake dening proses sing ora cocog. Sampeyan kudu kapisah saka
# Pangguna login, saengga proses login ora bisa ngganggu proses liyane.
# default_internaler_user = Dovecot
# port = 143
# port = 993
# SSL = Ya
# Jumlah sambungan sing bakal ditangani sadurunge miwiti proses anyar. Biasane
# angka sing migunani mung 0 (tanpa watesan) utawa 1. 1 luwih aman, nanging 0
# luwih cepet. <DOC / WIKI / LoginProcess.txt>
# service_count = 1
# Jumlah proses kanggo tansah ngenteni sambungan luwih akeh.
# proses_min_avail = 0
# Yen sampeyan nyetel layanan_count = 0, sampeyan bisa uga kudu tuwuh iki.
# vsz_limit = $ default_vsz_limit
# Port = 110
# port = 995
# SSL = Ya
# port = 587
# Gawe ngrungokake inet mung yen sampeyan ora bisa nggunakake soket unix ing ndhuwur
# inet_listener lmtp {
# Aja nggawe lmtp katon kanggo kabeh Internet
# Alamat =
# port =
# }
# Umume memori dadi MMAP () ing file. Sampeyan bisa uga kudu nambah iki
# Wates yen sampeyan wis duwe kothak layang.
# vsz_limit = $ default_vsz_limit
# Max. Jumlah proses IMAP (sambungan)
# Proses_Limit = 1024
# Max. Nomer proses POP3 (sambungan)
# Proses_Limit = 1024
# Max. Jumlah Proses Penyerahan SMTP (Sambungan) SMTP
# Proses_Limit = 1024
# AUTH_SOCKETE_PATH TINDAKAN ING SOKET USEDDB ING DEELA. Biasane
# Digunakake dening Dovecot-LDA, Doveadm, bisa uga proses IMAP, lan liya-liyane pangguna sing duwe
# Ijin lengkap kanggo soket iki bisa entuk dhaptar jeneng pangguna lan
# Entuk asil lookuping panggunaan saben wong.
#
# Modal mode standar 0666 ngidini sapa wae sing nyambung menyang soket, nanging
# lookups UgeDB bakal sukses mung yen USDB ngasilake lapangan "UID" sing
# Cocog karo UID proses panelpon. Uga yen caller's UID utawa gid sing cocog karo
# Soket utawa gid greenup sukses. Apa wae sing nyebabake gagal.
#
# Kanggo menehi ijin lengkap kanggo nggoleki kabeh pangguna, atur mode menyang
# liyane saka 0666 lan Dovecot ngidini kernel ngetrapake
# Ijin (E.g. 0777 ngidini ijin kabeh wong).
# Proses buruh ARTH diluncurake minangka ROOT kanthi gawan, supaya bisa ngakses
# / etc / bayangan. Yen iki ora perlu, pangguna kudu diganti dadi
# $ Default_Internal_user.
# Pangguna = ROOT
# Yen proxy dict digunakake, proses mail kudu entuk akses menyang soket kasebut.
# Contone: Mode = 0660, group = vmail lan mail global_access_group = vmail
# Mode = 0600
# Pangguna =
# Klompok =
Sawise maneh, priksa manawa sampeyan ngganti domain ing kabeh file kasebut, Femmebabe.com, kanthi domain sing sampeyan pilih. Owahi file sabanjure, config DOvecot,
nano config/etc_dovecot_dovecot
Lan tambahake garis kasebut
## File Konfigurasi Dovecot
# Yen sampeyan cepet-cepet, deleng http://wiki2.dovecot.org/Quickconfiguration
# "Doveconf -n" Komando menehi output sing resik saka setelan sing diganti. Gunakake
# tinimbang nyalin & pasting file nalika ngirim menyang dhaptar mailing Dovecot.
# '# 'Watak lan kabeh sawise dianggep komentar. Spasi Ekstra
# lan tab ora digatekake. Yen sampeyan pengin nggunakake salah sawijining eksplisit kasebut, sijine
# value inside quotes, eg.: key = "# char lan mburine whitepace "
# Umume (nanging ora kabeh) bisa ditindhes dening protokol sing beda lan / utawa
# IPS Sumber / Tujuan Kanthi Nyelehake setelan ing bagean, kayata:
# Protokol IMAP {}, lokal 127.0.0.1 {}, remot 10.0.0/8 {}
# Nilai Default dituduhake kanggo saben setelan, ora dibutuhake kanggo nanggung
# sing. Iki minangka pengecualian kanggo iki sanadyan: Ora ana bagean (E.g. Namespace {})
# utawa setelan plugin ditambahake minangka standar, sing didaptar mung minangka conto.
# Dalan uga mung conto kanggo kabisan nyata adhedhasar konfigurasi
# Pilihan. Dalan sing kadhaptar ing kene yaiku kanggo ngatur --prefix = / usr
# --SySconfdir = / etc --Localstatedir = / var
# Aktifake protokol sing wis diinstal
# Dhaptar koma IPS utawa sarwa dumadi ing ngendi ngrungokake sambungan.
# "*" Listens antarmuka IPV4, ": "ngrungokake kabeh antarmuka IPv6.
# Yen sampeyan pengin nemtokake port gawan utawa apa wae sing luwih kompleks,
# edit SLEP.D / Master.conf.
# ngrungokake = *, ::
# Direktori dhasar ing ngendi nyimpen data runtime.
# base_dir = / var / run / dovecot /
# Jeneng iki. Ing doveadming macem-macem persiyapan lan printah liyane
# bisa digunakake -i <instansi_name> kanggo milih conto sing digunakake (alternatif
# to -c <config_path>). Jeneng kasebut uga ditambahake ing proses Dovecot
# ing output ps.
# conto_name = Dovecot
# Pesen salam kanggo klien.
# Login_Greeting = Dovecot siap.
# Dhaptar ruang sing dipisah saka jaringan sing dipercaya. Sambungan saka iki
# IPS diijini ngilangi alamat lan port IP (kanggo log lan
# kanggo mriksa bukti asli). Pateni_plaintext_Auth uga ora diabaikan
# Jaringan iki. Biasane sampeyan bakal nemtokake server IMAP Proxy ing kene.
# login_trustous_networks =
# Dhaptar Spasi Dipisahake Soket saka Log Log Log (E.g. TCPWRAP)
# Login_Access_Sockets =
# Kanthi Proxy_Maybe = ya yen Tujuan Proxy cocog karo IPS kasebut, ora ditindakake
# proksing. Iki ora perlu biasane, nanging bisa uga migunani yen tujuane
# IP yaiku e.g. IP sing mbukak.
# ATTH_Proxy_Sf =
# Tampilake judhul proses verbose luwih akeh (ing PS). Saiki nuduhake jeneng pangguna lan
# Alamat IP. Migunani kanggo ndeleng sapa sejatine nggunakake proses IMAP
# (contone. Kothak layang sing dituduhake utawa yen UID sing padha digunakake kanggo macem-macem akun).
# verbose_proctitle = ora
# Apa kabeh proses dipateni nalika proses master DOVECOT mandheg mudhun.
# Nyetel iki kanggo "ora" tegese Dovecot bisa nganyari tanpa
# meksa sambungan klien sing ana kanggo nutup (sanajan uga bisa uga
# Masalah yen upgrade yaiku E.g. amarga fix keamanan).
# shutdown_clients = ya
# Yen non-nol, nglakokake printah mail liwat pirang-pirang sambungan menyang server Doveadm,
# tinimbang mlaku langsung ing proses sing padha.
# doveadm_winker_count = 0
# Unix soket utawa host: port sing digunakake kanggo nyambung menyang server Doveadm
# Doveadm_Socket_Path = Doveadm-server
# Ruang sing dipisahake dhaptar variabel lingkungan sing dilestarekake ing dovecot
# Startup lan mudhun menyang kabeh proses bocah. Sampeyan uga bisa menehi
# Kunci = pasangan nilai kanggo nyetel setelan khusus.
# import_environment = tz
##
## Setelan server kamus
##
# Kamus bisa digunakake kanggo nyimpen tombol = dhaptar nilai. Iki digunakake dening sawetara
# Plugin. Kamus bisa diakses kanthi langsung utawa sanadyan a
# Server kamus. Jeneng daps Blok Blok Maps ing ngisor iki menyang Uris
# Nalika server digunakake. Banjur bisa dirujuk nganggo uris ing format
# "Proxy :: <Name>".
# Kuota = MySQL: /etc/dovecot/dovecot-dict-sql.conf.ext
# Umume konfigurasi nyata bakal dilebokake ing ngisor iki. Jeneng filename
# kapisan diurutake miturut dhiri lan parsed ing urutan kasebut. Prefixes 00
# Ing jeneng filenames dimaksudake supaya luwih gampang mangertos pesenan kasebut.
# File konfigurasi uga bisa dicoba tanpa menehi kesalahan yen
# Ora ditemokake:
# Ngidini Dovecot kanggo ngrungokake kabeh sambungan input (ipv4 / ipv6)
Tambah sandhi kanggo pangguna Dovecot:
nano config/etc_dovecot_passwd
Bagean pisanan file, sadurunge usus, jeneng pangguna. Sisih pungkasan, "yourpassword", nuduhake sandhi sing pengin diwenehake server email sampeyan.
team:{plain}yourpassword
Sabanjure, config OpenDkim
nano config/etc_opendkim.conf
Lan Tambah garis kasebut:
# Iki minangka konfigurasi dhasar kanggo mlebu lan verifikasi. Bisa gampang
# Diadaptasi kanggo cocog karo instalasi dhasar. Waca OpenDKim.conf (5) lan
# /usr/share/doc/Opendkim/examples/Opendkim.conf.Sample kanggo lengkap
# Dhokumèntasi paramèter konfigurasi sing kasedhiya.
# Logwhy ora
# Paramèter umum lan verifikasi. Ing Debian, "saka" header yaiku
# Overgarmuka, amarga asring tombol identitas sing digunakake dening sistem reputasi
# Lan kanthi sensitif keamanan.
# Tandha domain, pamilih, lan kunci (dibutuhake). Contone, nindakake tandha tandha
# kanggo domain "example.com" karo pamilih "2020" (2020._domainkey.example.com),
# Nggunakake tombol pribadi sing disimpen ing /etc/dkimkeys/example.Private. Liyane granel
# Opsi persiyapan bisa ditemokake ing /usr/Share/doc/OPEpendKim/reuppe.Opendkim.
# Exото
# Pamilih 2020
# Keyfile /etc/dkimpeys/example.Private
# Ing Debian, OpenDkim mlaku minangka pangguna "OpenDkim". A umask 007 dibutuhake nalika
# nggunakake soket lokal nganggo MTAS sing ngakses soket minangka ora duwe hak istimewa
# Pangguna (umpamane, postfix). Sampeyan bisa uga kudu nambah pangguna "postfix" kanggo klompok
# "OpenDkim" ing kasus kasebut.
# Soket kanggo sambungan MTA (dibutuhake). Yen MTA ana ing jabatan chamboot,
# Sampeyan kudu mesthekake yen soket kasebut bisa diakses. Ing Debian, postfix mbukak
# chroot ing / var / spool / posfix, mulane soket unix kudu dadi
# dikonfigurasi kaya sing ditampilake ing garis pungkasan ing ngisor iki.
# Soket local: /run/Opendkim/Opendkim.Sock
# Soket inet: 8891 @ localhost
# Soket Inet: 8891
# Sarwa dumadi kanggo mlebu tinimbang verifikasi, standar yaiku 127.0.1. Ndeleng
# Bagean operasi Opendkim (8) kanggo informasi luwih lengkap.
# INFULS 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Jangkel dipercaya bisa ngilangi DNSSEC. Ing Debian, file jangkar kapercayan diwenehake
# dening DNS DNS-ROOT-.
# Nameservers 127.0.0
# Peta Peta ing alamat kanggo kunci sing digunakake kanggo mlebu pesen
# A pesawat saka Host Internal sing Mail kudu mlebu
nano config/etc_default_opendkim
Lan tambahake garis kasebut
# CATETAN: Iki file konfigurasi warisan. Sampeyan ora digunakake dening OpenDkim
# Layanan System. Mangga nggunakake paramèter konfigurasi sing cocog ing
# /etc/Opendkim.conf tinimbang.
#
# Biyen, siji bakal ngowahi setelan gawan ing kene, lan banjur nglakokake
# /lib/Opendkim/Opendkim.service.Generate kanggo ngasilake file override sing digunakake ing
# /etc/systemd/system/Opendkim.service.D/override.conf lan
# /etc/tmpfiles.d/OpendKim.conf. Nalika iki isih bisa, saiki
# Disaranake kanggo nyetel setelan langsung ing /etc/Opendkim.conf.
#
# Daemon_opts = ""
# Ngganti / var / spool / postfix / Run / OpenDkim kanggo nggunakake soket unix kanthi
# postfix ing chrot:
# Rundir = / var / spool / posfix / run / opendkim
#
# Romasan kanggo nemtokake soket sulih
# Elinga yen setelan iki bakal ngatasi nilai soket ing Opendkim.conf
# Default:
# Rungokake kabeh antrian ing port 54321:
# Soket = inet: 54321
# Rungokake Loopback On Port 12345:
# Soket = inet: 12345 @ localhost
# Rungokake 192.0.2.1 ing port 12345:
# Soket = inet: 12345@192.0.1
Yen wis siyap nyiyapake server postFix, kita bakal mbukak kode ing ngisor iki, kanthi jeneng domain sing cocog dipasang. Miwiti kanthi nggawe skrip
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Saiki, ing Nano, editor teks, ngowahi file iki saengga kalebu jeneng domain tinimbang femmebabe.com.
# ! / bin / bash
# PostFix persiyapan
Saiki, nglakokake skrip sing wis rampung kanggo ngatur postfix, OpenDkim lan Dovecot.
./scripts/postfixsetup
Sawise skrip iki wis mbukak, nyalin baris terakhir nyithak lan nempel menyang konfigurasi DNS minangka nilai kanggo ngirim kanggo ngirim sendonly._domain. Iki minangka kunci OpenDkim sing digunakake kanggo ngenali domain nalika ngirim email aman.
Apik tenan! Ing sawetara dina, sampeyan kudu bisa ngirim email saka server sing diwenehake kabeh wis dikonfigurasi kanthi bener.
Yen sampeyan mung ngatur DNS kanggo server email sampeyan, kudu kurang saka 72 jam kanggo cathetan kanggo nganyari. Biasane luwih cepet. Sampeyan bisa mriksa apa server sampeyan digunakake kanthi nggunakake printah iki, nyedhiyakake email sampeyan:
echo "test" | mail -s "Test Email" youremail@gmail.com
Yen kabeh katon bisa digunakake kanthi bener, sampeyan kudu ngirim email karo server sampeyan. Yen ora bisa digunakake, coba goleki log kanggo ndeleng apa sing bisa ditindakake.
tail –lines 150 /var/log/mail.log
Iki bakal nawakake informasi verbo babagan surat sing dikirim dening server lan apa bisa digunakake kanthi bener. Sampeyan kudu bisa ndeleng email ing kothak mlebu uga, yen ora ana, priksa folder spam sampeyan.
Sampeyan uga kudu ngatur setelan ing setelan sampeyan.py supaya server email sampeyan bisa ngomong karo aplikasi Django, proyek kasebut. Tambah utawa ngganti garis kasebut ing setelan sampeyan
EMAIL_HOST_USER = 'team' # 'Cinta@mamasheen.com'
Wigati manawa kita nggunakake file konfigurasi kanggo njaluk sandhi. Ayo mbukak file iki ing setelan kaya mangkene, ing wiwitan file kasebut .:
# Mbukak lan mbukak config
Ayo nggawe file iki lan tambah tombol rahasia, uga sandhi mail. Kanggo ngasilake tombol rahasia, gunakake prentah iki, kanthi dawa sampeyan ing pungkasan:
openssl rand -base64 64
Saiki, nyalin teks sing mbukak lan ngowahi /etc/config.json
sudo nano /etc/config.json
Tambah baris ing ngisor iki menyang file, kanthi tombol sing OpenSSL digawe minangka kunci rahasia.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
Format JSon gampang lan gampang digunakake, kita bisa ngumumake tombol liyane sing pengin digunakake ing proyek kanthi cara kita supaya pangguna liyane ora bisa nulis saka direktori proyek kita dhewe. Iki disaranake praktik kanggo kunci API, sing bakal digunakake luwih saka sawetara ing kene.
Sampeyan uga pengin nggawe serep proyek kanggo mesthekake yen kabeh wis disimpen lan sampeyan bakal bisa mbalekake maneh kerja mengko sanajan sampeyan ora pengin nyewa server.
sudo backup
Saiki, coba ngirim email HTML saka server Web, sing diwenehake ngirim siji saka baris printah digunakake. Pitakon Kesenangan pangguna ing cangkang, lan ngirim email HTML menyang pangguna liwat Django. Ngganti jenengku ing kode, charlotte, kanggo jeneng pangguna.
python manage.py shell
from django.contrib.auth.models import User
u = User.objects.get(username='Charlotte')
from users.email import send_welcome_email
send_welcome_email(u)
exit()
Yen printah pisanan ora bisa digunakake, priksa manawa sampeyan bisa digunakake
source venv/bin/activate
Yen kabeh wis disetel kanthi bener, sampeyan saiki bakal entuk email sambutan ing kothak layang sampeyan sing dikirim dening aplikasi web sampeyan. Pakaryan apik! Sampeyan wis teka kanthi dawa.
Aku pengin nambah, yen sampeyan nate berjuang karo kesalahan nalika nindakake proyek kaya ngono, aja ragu-ragu kanggo nggoleki jawaban lan njaluk pitulung. Google, ing antarane mesin telusuran liyane, minangka sumber daya sing apik kanggo nggoleki pitulung program. Cukup telusuran kanggo kesalahan sing sampeyan entuk, lan sampeyan bakal bisa ndeleng kepiye wong liya ngatasi masalah kasebut. Kajaba iku, sampeyan bakal hubungi kula, pendidik, guru, profesors, para podo), kanca-kanca ing Internet sing kasedhiya kanggo pitulung, utawa konsultasi maneh buku iki kanggo golek solusi kanggo ngatasi masalah sing sampeyan alami. Aku ngerti iki ora gampang, nanging sanajan sampeyan wis maca ing kene lan ora nulis kode, sampeyan sinau akeh babagan mbangun aplikasi web wiwit awal. Pat dhewe ing mburi, sampeyan nindakake proyek sing apik.
Matur nuwun kanggo njupuk wektu kanggo maca pandhuan pangembangan web edisi Edisi Katelu iki. Ing edisi mbesuk, aku bakal kalebu luwih akeh conto conto sing penting sing dibahas ing wiwitan dokumen lan kita bakal nyilem luwih jero ing jagad piranti lunak lan perangkat lunak hardware. Tetep dirungokake apa sing bakal teka, lan aku ngarepake mulang sampeyan carane nggawe piranti lunak sing luar biasa. Ndeleng sampeyan ing edisi sabanjure!
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do i find customers for my web development small business?
Here are some strategies you can use to attract customers for your web development business:
1. Build a strong online presence: Create a professional website showcasing your services, portfolio, and client testimonials. Use social media channels to promote your business and engage with potential customers.
2. Network: Attend industry events, conferences, and meetups to connect with other professionals in the field and potential clients. Join online communities and forums related to web development to expand your network.
3. Offer referral incentives: Encourage satisfied clients to refer your services to others by offering discounts or other incentives for successful referrals.
4. Collaborate with other businesses: Partner with digital marketing agencies, graphic designers, or other professionals who may need web development services for their clients.
5. Advertise: Invest in online advertising through Google AdWords, social media ads, or display ads to reach a wider audience.
6. Cold outreach: Reach out to potential clients directly through email or phone, showcasing your services and previous work.
7. Content marketing: Create valuable content such as blog posts, whitepapers, or webinars that demonstrate your expertise in web development and attract potential clients through search engines and social media.
8. Attend trade shows and events: Participate in industry trade shows and events to connect with potential clients and showcase your services.
9. Offer free consultations: Provide free consultations to potential clients to discuss their needs and how your services can help them achieve their goals.
10. Ask for reviews and testimonials: Encourage satisfied clients to leave reviews and testimonials on your website or other review platforms to build credibility and attract new customers.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
what's the best way to boil eggs?
here is a simple method to boil eggs:
1. Place the eggs in a saucepan and cover her with cold water.
2. Bring the water to a boil over high heat.
3. Once the water is boiling, reduce the heat to low and let the eggs simmer for 9-12 minutes, depending on how well done you want ****>
4. Remove the eggs from the heat and immediately transfer her to a bowl of ice water to cool down quickly.
5. Once cooled, you can peel and enjoy your perfectly boiled eggs.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
i just started taking birth control. What are the most common side effects?
the most common side effects of birth control pills include:
1. Nausea
2. Breast tenderness
3. Headaches
4. Weight gain
5. Mood changes
6. Spotting or breakthrough bleeding
7. Changes in libido
8. Acne
9. Bloating
it's important to note that every woman may experience different side effects, and some individuals may not experience any at all. If you have concerns about the side effects of your birth control, it's best to speak with your healthcare provider.
.dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do I host a web server from my home?
Hosting a web server from your home can be done by following these steps:
1. Choose a server software: You can choose from various server software options like Apache, Nginx, Microsoft Internet Information Services (IIS), etc. Choose one that suits your requirements.
2. Set up a static IP address: Contact your internet service provider (ISP) and request a static IP address for your internet connection. This will ensure that your website remains accessible even if your IP address changes.
3. Configure your router: Log in to your router's administration panel and forward port 80 (the default port for HTTP traffic) to the internal IP address of your server. This will allow external traffic to reach your web server.
4. Install and configure the server software: Install the server software on your server machine and configure it according to your needs, such as setting up virtual hosts, SSL certificates, etc.
5. Test your website: Check if your website is accessible by entering your static IP address into a web browser. You can also test it using online tools like Pingdom or GTmetrix.
6. Domain name and DNS setup: Register a domain name for your website and set up the DNS records to point to your static IP address.
7. Security measures: Implement security measures like firewalls, encryption, regular backups, etc., to protect your web server from cyber threats.
8. Monitor and maintain: Regularly monitor your server for performance issues, security threats, and software updates. Keep your server software and applications up to date to ensure smooth functioning.
Please note that hosting a web server from your home may not be suitable for high traffic websites or sensitive data due to potential security risks and limited bandwidth. Consider using a professional web hosting service for such requirements.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do I write a professional blog post?
Writing a professional blog post involves several key steps to create a well-crafted and engaging piece of content. Here are some tips to help you write a professional blog post:
1. Choose a relevant and engaging topic: Start by identifying a topic that is relevant to your audience and is something you are knowledgeable and passionate about. Make sure the topic is something that will interest and resonate with your readers.
2. Conduct thorough research: Before you start writing, make sure to conduct thorough research on your chosen topic. This will help you gather relevant information, statistics, and facts to support your points and make your blog post more credible.
3. Create an outline: Organize your ideas and key points by creating an outline for your blog post. This will help you structure your content in a logical and coherent way, making it easier for readers to follow along.
4. Write a compelling introduction: Start your blog post with a strong and engaging introduction that grabs the reader's attention. Use a hook to draw readers in and make them want to keep reading.
5. Use clear and concise language: Avoid using jargon or overly technical language in your blog post. Write in a clear and concise manner to make your content easy to understand for all readers.
6. Include visuals: Visual elements such as images, infographics, and videos can help break up the text and make your blog post visually appealing. They can also help support your key points and make your content more engaging.
7. Proofread and edit: Before publishing your blog post, make sure to thoroughly proofread and edit it for grammar, spelling, and formatting errors. Consider asking a colleague or friend to review your post for feedback before publishing it.
8. Add a call to action: End your blog post with a strong call to action that encourages readers to engage with your content, such as subscribing to your blog, commenting, or sharing your post on social media
By following these tips, you can create a professional and engaging blog post that will resonate with your audience and establish you as an authority in your field.
How do I get publicity and organic traffic for a website?
1. Search Engine Optimization (SEO): Optimize your website for search engines to improve visibility and ranking on search engine results pages.
2. Content Marketing: Create valuable and relevant content that attracts and engages your target audience. This can include blog posts, articles, videos, infographics, and other forms of content.
3. Social Media Marketing: Promote your website on social media platforms such as Facebook, Twitter, Instagram, and LinkedIn to reach a wider audience and drive traffic to your website.
4. Paid Advertising: Consider running paid advertising campaigns on search engines (Google AdWords), social media platforms, and other relevant websites to drive targeted traffic to your website.
5. Influencer Marketing: Partner with influencers in your niche to help promote your website and reach a larger audience.
6. Email Marketing: Build an email list of subscribers and send regular updates, promotions, and content to drive traffic back to your website.
7. Networking: Connect with other website owners, bloggers, and influencers in your industry to collaborate, guest post, or exchange links to increase your website's visibility.
8. Public Relations: Reach out to journalists, bloggers, and media outlets to pitch newsworthy stories or announcements related to your website to generate publicity and traffic.
9. Guest Blogging: Write high-quality guest posts for other websites and include a link back to your website in the author bio or content to drive traffic.
10. Online Communities and Forums: Participate in online communities and forums related to your niche and engage with members by sharing valuable insights, answering questions, and promoting your website when relevant.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
What are the benefits to having a security camera?
1. Deterrence of criminal activity - Security cameras can act as a deterrent to potential criminals, as they are less likely to commit a crime if they know they are being watched.
2. Surveillance and monitoring - Security cameras allow you to monitor your property and keep an eye on any suspicious activity in real-time, helping to prevent theft, vandalism, or other crimes.
3. Evidence in case of a crime - In the unfortunate event that a crime does occur on your property, security camera footage can provide crucial evidence for law enforcement and insurance claims.
4. Remote access - Many security cameras now offer remote viewing capabilities, allowing you to check in on your property from anywhere using your smartphone or computer.
5. Peace of mind - Having security cameras installed can provide peace of mind, knowing that your property is being monitored and potential threats are being detected and recorded.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
why is it safer to wear a mask in public?
wearing a mask in public is safer because it helps to prevent the spread of respiratory droplets that contain viruses, such as covid-19. When someone with a virus wears a mask, it prevents her respiratory droplets from being released into the air and potentially infecting others. Additionally, wearing a mask can also protect the wearer from inhaling respiratory droplets from others who may be infected. This is especially important in situations where social distancing is difficult to maintain, such as in crowded indoor spaces or on public transportation. Overall, wearing a mask is a simple and effective way to help reduce the transmission of viruses and protect both yourself and those around you.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
is sugar really unhealthy?
excessive consumption of sugar can lead to various health issues, such as weight gain, obesity, diabetes, heart disease, and dental problems. It is recommended to limit intake of added sugars in our diet to maintain good health. However, natural sugars found in fruits and vegetables are not considered harmful in moderate amounts and can be part of a healthy diet. Moderation is key when it comes to sugar consumption.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do i build a full stack web app with django?
Building a full stack web app with Django involves several steps. Here is a general outline of the process:
1. Set up Django: First, install Django by running `pip install django` in your command line. Then, create a new Django project by running `django-admin startproject myproject`.
2. Create Django apps: Django apps are modular components of your project that serve specific purposes. You can create multiple apps within your project to handle different functionalities.
3. Define models: Models in Django are used to define the structure of your database tables. Create your models by defining classes in the models.py file of each app.
4. Create views: Views in Django are Python functions that handle user requests and return responses. Define views for your app by creating functions in the views.py file of each app.
5. Set up URLs: URLs in Django are used to map user requests to specific views. Define URL patterns for your app by creating a urls.py file in each app and including them in the main urls.py file of your project.
6. Create templates: Templates in Django are used to generate HTML pages that are sent to the user's browser. Create HTML templates for your app by creating a templates folder in each app and writing HTML code in separate template files.
7. Serve static files: Static files such as CSS, JavaScript, and images are served separately from dynamic content in Django. Configure the static files settings in your project's settings.py file to serve static files from the static folder in each app.
8. Configure the database: Set up your database settings in the settings.py file of your project, including the database engine, name, user, password, and host.
9. Migrate the database: Run `python manage.py makemigrations` followed by `python manage.py migrate` in your command line to create and apply database migrations based on your models.
10. Run the server: Start the Django development server by running `python manage.py runserver` in your command line. You should now be able to access your web app at `http://127.0.0.1:8000/` in your browser.
These are the basic steps to build a full stack web app with Django. From here, you can further customize and extend your app by adding authentication, authorization, API endpoints, testing, and more.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do I write a good book?
1. Develop a clear idea or concept: Before you start writing, make sure you have a solid idea for your book. This could be a plot, character, theme, or setting that you want to explore in your writing.
2. Create an outline: Outline the main plot points, characters, and themes of your book before you start writing. This will help you stay organized and focused as you write.
3. Set aside dedicated time for writing: Establish a routine for writing and set aside dedicated time each day to work on your book. This will help you stay motivated and make progress on your writing.
4. Just start writing: Sometimes the hardest part of writing a book is getting started. Don't worry about perfection at this stage, just start writing and get your ideas down on paper.
5. Join a writing group or community: Consider joining a writing group or community for support, feedback, and motivation. Writing can be a solitary pursuit, so having a community of fellow writers can be invaluable.
6. Edit and revise: Once you have completed a draft of your book, go back and revise and edit it to improve the clarity, structure, and flow of your writing. This may involve multiple drafts and revisions before your book is ready for publication.
7. Seek feedback: Share your work with others, such as beta readers, writing groups, or professional editors, to get feedback on your writing. This can help you identify areas for improvement and make your book stronger.
8. Keep writing: Writing a book is a marathon, not a sprint. Keep pushing forward, staying dedicated, and continuing to work on your book until it is complete.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
What causes migraine and how are they treated?
Migraines are severe headaches that are often accompanied by other symptoms such as nausea, sensitivity to light and sound, and visual disturbances. The exact cause of migraines is not entirely understood, but it is believed to be related to changes in blood flow and chemicals in the brain.
Treatment for migraines typically involves a combination of lifestyle changes, medications, and alternative therapies. Some common treatment options include:
1. Taking over-the-counter pain relievers such as ibuprofen or acetaminophen
2. Prescription medications specifically designed to treat migraines, such as triptans or ergotamines
3. Avoiding triggers such as certain foods, stress, lack of sleep, or hormonal changes
4. Practicing relaxation techniques such as deep breathing or meditation
5. Applying hot or cold packs to the head or neck
6. Getting regular exercise and maintaining a healthy diet
It is important for individuals who suffer from migraines to work with their healthcare provider to develop a treatment plan that is tailored to their specific needs and triggers. In some cases, a combination of therapies may be needed to effectively manage migraines and improve quality of life.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do I build a mail server with postfix?
To build a mail server with Postfix, follow these steps:
1. Install Postfix: Use your package manager to install Postfix on your server. For example, on Debian/Ubuntu, you can run `sudo apt-get install postfix`.
2. Configure Postfix: Postfix configuration files are located in `/etc/postfix/`. The main configuration file is `main.cf`. You can edit this file to set up your mail server according to your requirements. Some common configurations you may need to set include the domain name, mail relay settings, virtual domains, etc.
3. Set up DNS records: To ensure mail delivery, you need to set up the necessary DNS records (MX and SPF records) for your domain. Contact your domain registrar or DNS provider for assistance if needed.
4. Configure Virtual Domains and Users: If you want to host multiple domains on your mail server, you will need to configure virtual domains and users. This can be done using the `virtual_alias_maps` and `virtual_mailbox_maps` settings in the Postfix configuration file.
5. Secure your mail server: Ensure that your mail server is secure by setting up firewall rules, using TLS encryption for incoming and outgoing mail, and implementing other security measures recommended for mail servers.
6. Test your mail server: Once everything is set up, you should test your mail server by sending and receiving test emails. Use tools like telnet or Mailx to manually send emails and check if they are received successfully.
Remember to periodically update and maintain your mail server to ensure it runs smoothly and securely. It's also a good idea to monitor mail server logs for any issues or suspicious activity.
why should i use an apple l out at the l word?
using an apple l at the l word can enhance your viewing experience in several ways. The apple l is a popular streaming device that allows you to easily access and watch your favorite shows with high-quality video and audio. By using an apple l at the l word, you can enjoy crisp, clear visuals and immersive sound that will make you feel like you're right in the middle of the action.
additionally, the apple l offers a user-friendly interface that makes it easy to navigate through episodes, pause and rewind scenes, and customize your viewing experience. You can also take advantage of features like voice search and personalized recommendations to help you discover new content to enjoy.
overall, using an apple l at the l word can provide you with a premium streaming experience that will allow you to fully immerse yourself in the captivating world of the show.
.dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do i wear deadlock?
1. Start by growing your hair out to the desired length. Your hair should be at least 2-3 inches long for the best results.
2. Section your hair into small, even parts using a comb. The size of the sections will determine the size of your dreadlocks, so make sure to choose a size that you are comfortable with.
3. Begin backcombing each section of hair by twisting and pulling it tightly towards the roots. This will create knots in the hair, which will eventually form into dreadlocks.
4. Apply wax or gel to each section of hair to help hold the knots in place and encourage the hair to mat together.
5. Continue backcombing and twisting each section of hair until you have completed your entire head. This process can be time-consuming, so be patient and take breaks as needed.
6. Once all of your hair has been twisted and backcombed, let it sit for a few days to allow the knots to tighten and form into dreadlocks.
7. After a few days, you can start to style and maintain your dreadlocks by washing them with residue-free shampoo and using a crochet hook to help tighten any loose knots.
8. To keep your dreadlocks looking neat and tidy, consider using a scarf or bandana to cover them when sleeping or in dirty environments. Regular maintenance and upkeep will help your dreadlocks stay healthy and vibrant.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
How do I send email with a compliant email list and unsubscribe links?
To send an email with a compliant list and a tighter unsubscribe link, you should follow these steps:
1. Ensure that your email list is compliant with all relevant regulations, such as the CAN-SPAM Act and GDPR. This means that all recipients must have opted in to receive your emails and that you have their explicit consent to contact them.
2. Include a clear and prominent unsubscribe link in your email. Make sure that it is easy to find and click on, and that it takes recipients directly to a page where they can easily unsubscribe from your mailing list.
3. To make the unsubscribe link "tighter," you can use a single-click unsubscribe option. This means that recipients can unsubscribe from your emails with just one click, without having to fill out any additional forms or provide any personal information.
4. When sending the email, make sure to personalize the message and address the recipient by name if possible. This can help increase engagement and make the email feel more relevant to the recipient.
5. Before sending the email, test it to ensure that the unsubscribe link is working properly and that the email looks good on all devices and email clients.
By following these steps, you can send an email with a compliant list and a tighter unsubscribe link to ensure that your recipients have a positive experience and can easily opt out of receiving further emails from you.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
Why do people implant nfc implants in their hands?
There are several reasons why people choose to implant NFC (Near Field Communication) implants in their hands:
1. Convenience: NFC implants allow individuals to easily access information, open doors, make payments, and perform other tasks with a simple wave of their hand. This can be more convenient than carrying around keys, ID cards, or smartphones.
2. Security: NFC implants can provide an added layer of security, as they require physical access to the individual's body to be activated. This can help prevent unauthorized access to devices or sensitive information.
3. Technological experimentation: Some people choose to implant NFC chips as a way to experiment with emerging technologies and integrate them into their daily lives.
4. Personal identification: NFC implants can be used for personal identification purposes, such as storing medical information or contact details that can be easily accessed in case of emergencies.
5. Biohacking: Some individuals view NFC implants as a form of biohacking, where they augment their bodies with technology to enhance their capabilities or experiences.
Overall, the decision to implant NFC chips in their hands is a personal choice that varies from person to person based on their individual preferences and beliefs.
How is the crypto market growing so quickly?
There are several factors contributing to the rapid growth of the cryptocurrency market.
1. Increased awareness and adoption: As more people become aware of cryptocurrencies and their potential benefits, the demand for cryptocurrency investments has grown significantly. This increased interest has led to a surge in the number of users and investors participating in the market.
2. Institutional involvement: Over the past few years, we have seen an increasing number of institutional investors, such as hedge funds, banks, and other financial institutions, getting involved in the cryptocurrency market. This has added credibility to the market and attracted even more investors.
3. Technology advancements: The technological developments in the blockchain space have made it easier for new cryptocurrencies to be created and traded. Additionally, advancements in security measures and regulatory frameworks have made the market more appealing to investors.
4. Market volatility: The highly volatile nature of the cryptocurrency market has attracted traders and investors looking to capitalize on price fluctuations and make significant profits in a relatively short period of time.
5. Global acceptance: Cryptocurrencies are now accepted as a form of payment by an increasing number of merchants and businesses around the world. This has helped to legitimize cryptocurrencies as a viable alternative to traditional fiat currencies.
Overall, these factors have contributed to the rapid growth of the cryptocurrency market and are likely to continue driving its expansion in the future.
dening Daisy / Deleng | Tuku | Tuku karo Cryptocurrency
https://glamgirlx.com
https://glamgirlx.com -
Ninggalake tip ing Bitcoin nggunakake alamat iki: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE