Pembajaran Dibébar Dasar sareng kaamanan sareng kaamanan ku conto Édisi katilu Charlotte harper 3 Juli, 2024 Diropéa / Ngarobih tanggal 3 Juni, 2025
Foreword:
Tempuran kaamanan dina parangkat lunak ngawangun kanggo wéb nyaéta standar penting dina rencana wéb sareng palaksanaan wéb bari ngarékang prototip mani anu tiasa diopat, sareng mangpaat pikeun tujuan praktis. Domba (dokumuh game Candup), kalayan éta ngalaksanakeun HTML, JavaSript, sareng CSS ogé anu pikaresepeun pikeun tindakan 15 Cépé anu pikaresepeun pikeun rata-rata sareng jasa ahir sareng jasa Milarian waktos maéhan waktos atanapi ngeusian anu tos aya dina Internét, biasana dina alat smartphone layar layar layar layar. Kaseueuran jalma moal tiasa terang dimana ngamimitian nalika aranjeunna badé ngawangun halaman wéb ti ngagarab késak sareng hususna, sareng hususna. Upami anjeun seueur sababaraha minggu pikeun maca liwat buku ieu sareng diajar anu kuring hoyong ngajarkeun anjeun, atanapi nyiptakeun sareng kuring sacara pribadi ngeunaan tujuan anjeun sareng nampi acara pangan anu bakal dilakukeun sareng anjeun anu bakal diajar sareng nyumponan buku anu leres, sareng nyayogikeun pamasihan bumi.
Tentang abdi: I am pamekar software kalayan rupa pangalaman dina C / C ++, Java, Pymon, HTML, CSS sareng Javascript. Kuring ngawangun situs web anu badé dianggo, badé kunjungan, bahkan dicuguh ngalebetkeun ngan ukur diajar, nyiptakeun waktos anu penting, kuring ngajual software. Upami anjeun gaduh pamanggih pikeun basa-perset kumaha anjeun hoyong situs wéb pikeun milarian sareng fungsi, anjeun sanggup ngadukung anjeun anjeun tiasa pendak sareng anjeun. Daripada nyoba ngajual anjeun waktos kuring, kuring nyoba mésér Hormat: Abdi hoyong nyarios anjeun kana ngawangun aplikasi anu ngagaduhan Inpormasi anu cocog, sareng ngajar anjeun anu pantes, sareng ngajar anjeun anu pantes, sareng ngajarkeun anjeun anu ngagaduhan ku kebon naon waé. Sareng hayu atuh jelas, pendidikan anu kuring pasihan anjeun bakal informal. Anjeun tiasa angkat ka sakola sareng diajar sadayana ieu kalayan pendidikan formal, bahkan maca buku ieu di sakola, lengkep tugas, sareng tahan hiji tugas anjeun, tapi kuring henteu ngarengsekeun tugas anjeun sareng naroskeun anjeun langsung ka tujuan anjeun. Abdi sanés profésor anjeun, anjeun tiasa nganggap kuring sapertos balad anu hoyong pituduh anjeun ka arah karir ku kasuksésan pribadi anjeun nyalira. Sareng kuring henteu jual kasuksésan anjeun, anjeun kedah mésér éta waktos. Diajar kana kode gaduh kurva diajar anu laun sareng henteu gampang, atanapi malah kedahna. Anjeun kedah damel salaku keras sakumaha anu anjeun cobian sareng teraskeun nyobian sareng gagal sareng cobian deui sanaos anjeun nalika anjeun frustasi pikeun diajar sareng ngawangun aplikasi sorangan. Éta dina sipat kode sorangan. Kode dirolangkun ku kompiler anu dirancang pikeun masihan pesen kasalahan kasalahan, sareng ieu bakal ngajarkeun anjeun kumaha cara kode, bahkan anjeun ngan ukur nyalin kasalahan kana mesin pencari anjeun. Sareng kuring kedah nyarios, anjeun henteu kedah beunghar, pinter, suksés, atanapi bahkan jabatan atanapi dilegaan pikeun ngawangun aplikasi. Komputer ngurus organisasi anu anjeun. Anjeun ngan saukur yakin ngalangkungan uji coba sareng kalepatan, ngajaga fokus sareng kerja keras naon anu anjeun lakukeun, sareng anjeun bakal gaduh karir anu suksés pisan di sadayana.
Saha abdi: Kuring sadar yén bagian ka tukang langkung seueur ngeunaan diajar sareng anjeun nyandak hiji cara tina buku ieu. Saha kuring persis? Éta patarosan rumit. Kuring teu jelas dina diri kuring, salaku kuring menderita médis anu tiasa ngajantenkeun kode ieu waktos atanapi nyerat buku, nalika ngeusian tagihan kuring anu langkung hésé nalika ngenalkeun saterasna. S pondok pondok, upami anjeun maca buku ieu, anjeun bawa deui ka bumi kumargi anjeun langsung ngaleupaskeun, atanapi anjeun ngan maca anjeun. I masihan insinyur sorangan, pangembang parangkat lunak, sareng mahasiswa, sareng kuring nyerat buku ieu pikeun murid anu sanés sapertos gaduh kahirupan padamelan bisnis anu parantos langkung aya masalah. Umumna, ieu naon anu kuring lakukeun: Kuring ngawangun aplikasi pikeun ngabantosan diri sareng jalma sanés. Kuring mangrupikeun Panungtun ogé, sanaos ieu publikasi munggaran anu kuring badé ngalengkepan supados pasang portopolio babarengan pikeun dokumén anu mangpaat, sareng kuring teges anu lumrah, sareng kuring ogé tegang, sareng kuring ogé seniman anu mangpaat, sareng kuring tegalan anu mangpaat, sareng kuring seniman anu mangpaat, sareng kuring senakeun anu kapaké, sareng kuring tegal ogé. Kuring bakal ngaku ieu ka anjeun, kuring jinis jalma anu anéh. Kuring henteu sampurna, kuring parantos ngajunit sareng hukum-hukum malah nuju ngantep kuring nyalahgikir sareng universitas sareng ngantunkeun namina. Abdi awéwé ku Lahirkar, kuring nganggo Statkup, nyandak potoitaskeun sorangan?, Ngagem ageman sareng bagéan awéwé séjén, sareng kuring tetep sadar ka dirina salaku bikang. Kuring ngagaduhan masalah sareng jalma sanés anu baheula anu nuju nuju perancap sareng tulisan sareng ngawangun wéb, sareng kuring hapunten yén kuring henteu acan tiasa kéngingkeun buku ieu di leungeun anjeun. Anjeun bakal hoyong maca sareng nulis kode anu siga milik kuring sareng damel sapertos tambang sareng ngayakeun hal anu sami tapi langkung saé tapi sanaos langkung saé, sabab anjeun ngan ukur ngémutan buku anjeun. Kuring ngagaduhan-unggal masalah sareng kulawarga berbarat, kaayaan kaséhatan, para proké, media, sareng hukumna, sareng kode kuring langkung éskorit sareng frustasied dunya anu kabagi. Tapi, buku ieu mangrupikeun hal anu kuring paduli, orok kuring, portopolio kuring, sareng mata pencaharian kuring, janten kuring ngahargaan pertimbangan anjeun nalika anjeun nyandak téks ti kuring. Punten émut Kuring henteu sampurna, buku ieu tos gaduh kasalahan, révisi, sareng édisi anyar, sareng anjeun kedah pikirkeun sareng otak logis anjeun tiasa dianggo ayeuna. Ogé, ngartos yén kuring hartosna ogé pikeun anjeun sanajan anjeun nyanghareupan tantangan nalika nyerat. Pikirkeun sapertos kieu: nalika anjeun ngan ukur nyéwa sistem komputer kanggo ngalakukeun sagala naon anu anjeun tiasa bayangkeun di ruang Digital, nyimpen sadaya inpormasi anu anjeun rujut sareng masalah, bahkan bakal ngartos, bahkan bakal nyumponan, bahkan bakal nyumponan. Kuring nyaritakeun ieu kusabab kuring mendakan kasusah anu sami. Anggo buku ieu di résiko nyalira, damel sareng komunitas sareng komunitas anjeun anu tiasa anjeun ngawangun software dina jero setélan anu aman, sareng ngabantosan kuring henteu tiasa dianggo Internét. Anjeun moal kenal pisan sareng saha kuring kalayan ngan ukur sababaraha kecap, tapi kuring ajak anjeun maca, anjeun bakal terang kuring nalika kuring maca sareng ngartos padamelan anjeun. So bakal teu aya padamelan sareng buku ieu, salami profesor anjeun atawa guru teu ngadalikeun anjeun, tapi kuring ajak anjeun ngawangun sababaraha portopolio diri anjeun ogé tiasa diajar naon anu anjeun perbarikan kumaha anjeun bakal diajar kumaha anjeun parantos diajar kumaha anjeun diajar kumaha anjeun diajar. Pritis Kasonsmone abdi dina kalolobaan naon anu bakal maca dina buku ieu, sabab nuju ngalebetkeun kode tina proyék-pitulung anu saé, sareng rupa-rupa.
Naon buku ieu: Buku ieu mangrupikeun tutorial ku conto. Anjeun tiasa mendakan kode di di di dieu, petunjuk kanggo diajar kodeu, inpormasi dina kodeu debugging sareng masalah deui, upami aya deui kodeu anjeun, aplikasi sareng jasa Interaktif, maka jasa perusahaan anjeun ngawangun deui, Apple Cacak Anjeun, Apple Cacat Dina lampu anu paling saé pikeun anu paling pikaresepeun pikeun pangguna akhir anjeun, sémah wéb anjeun. Dina buku ieu, kuring bakal mendakan jumlah inpormasi software anu difét dina wéb sapertos kaamanan sapertos kaamanan. Urang bakal ngamimitian pangalaman diajar ku ngawangun proyék dasar nganggo cangkang henteu nganggo cangkang UNI, kalayan fitur cadangan sareng sapageup. Hark, kami bakal nguji situs wéb DRO blog DayTo. Ngarobih Blog kami nganggo fitur Wayur Salahna pikeun nyayogikeun softrési Autherfikasi, Pam). Kami bakal bakal ningali penanganan sareng ngolah file, ngajalajah pidéo, sumbungan sora, barcode scannit sareng pangenal karakteral, antara konsep séjén. Sapanjang jalan urang bakal nguji APIS anu bakal ngabantosan urang nyusun software kami langkung saé sareng aman. Opanggoana, kami bakal ngajagaan kaamanan fisik sareng alat militsi sapertos senca sareng hama sareng procreting kaasup larving kami sareng mendakan descressing anu parantos dipuruskeun sareng kedortasi. Kami bakal ngejat di sapanjang jalan ngawangun patandingan, 2d mesin tendering, sareng damel sareng hardware anu dipoto dianggo ku kasusah dasar. Tumuwuh, Urang ogé bakal ngagunakeun solusi diajar M mesin anu parantos sayogi dina seueurangkat software kami. Kami ogé bakal gaduh alat saham sayogi kanggo Wéb kanggo Stressline sareng Aman prosés. Buku ieu mangrupikeun pituduh pikeun kasuksésan anjeun dina ngawangun aplikasi wéb sareng ngahijikeun éta sareng jaringan profesional komputer sareng Sistem Mentiliri anu dipasang pikeun ngawangun hardware sareng pangalaman anu dipilampah.
Naon buku ieu henteu: Upami anjeun leres-leres badé gaduh situs wéb, anjeun ngan saukur tiasa nyetél toko anu saé sareng ngajual naon anu anjeun peryogi, pasang BLE, poto atanapi upami henteu kantos nyerat hiji garis. Buku ieu henteu. Buku ieu bakal ngajarkeun ka anjeun Kumaha ngawangun software anu langkung mangpaat, inclétasi, fungpasi sareng aman langkung software, sigana moal jalan. Upami anjeun nuturkeun buku ieu raket, anjeun badé nyerat Kode, kodeu kajiwangan, ngawangun aplikasi anjeun, sareng anjeun bakal mayar artos. Abdi bakal artos artos tina buku ieu, sanaos dina tahap awal, kusabab ngandung inpormasi jalma butuh sareng badé maca, sareng parantos mésér nalika nganggo aplikasina. Buku ieu moal ngawangun aplikasi pikeun anjeun, tapi bakal nunjukkeun anjeun dina arah anu leres sareng Arm anjeun nganggo alat sareng kulawarga, sareng kulawarga.
Naon anu anjeun bakal diajar: Buku ieu bakal ngajarkeun anjeun kumaha ngawangun sareng ngajual software, fung softelés kapfayun, ngarékam sapertos pangkiwiaan sareng bursa (Nursors (Nurs). Buku ieu bakal ngajarkeun anjeun kumaha ngagunakeun komputer jagadadatan, fokus dina fatir Dluon Begia, nyandak kode basam anu cocog, alungkan Kaaspppes, Id scanning, gambar sareng modation video, data mikrotor pikeun ngajaga software anjeun aman, pangolahan pamayaran, pengecualian Cryponstress, sareng seueur deui. Anjeun bakal diajar artos alatna Bluetooth anjeun sorangan sorangan sorangan sorangan sorangan, MicroconTtroller, zklocltrollers, sirklocklard, ngémutan sareng situ ogé tuangeun ogé. Kuring bakal nunjukkeun pangimpulkeun 3D desain diterapkeun kanggo pabrik panyusun adunisasi sareng alat anu maot, janten anjeun tiasa ngahasilkeun ruangan anu dicirikeun, alat-ecorderic. Sareng jaringan aranjeunna nganggo Bluetooth sareng wéb. Hususna, urang bakal nguji dua studi kasus, massalaging getar sareng baris pambeung womemade, boh anu dipasihan dina wéb partener. Anjeun bakal diajar ngajual sareng ngawangun sareng ngaleupaskeun halaman wéb tina taneuhnt, ngajantenkeun masalah, ngadamel fungsina, aman, éndah, paling penting sareng anu penting pisan. Anjeun bakal diajar kumaha ngagunakeun diajar mesin sareng visi komputer pikeun ngadamel Loka anu aman sareng langkung praktis, ngarahukeun pidéo nganggo situs pangguna sareng bisnis anu pangsaéna pikeun nyiptakeun inpormasi anu gaduh réspon sareng bisnis anu pangsaéna pikeun nyayogikeun sadaya jalma sareng bisnis. Buku ieu bakal diokuskeun rada jauh pisan dina média, kaamanan sareng masalah mesin, mangrupikeun tilu krématna anu bakal kéngingkeun anjeun bakal ngawangun perangkat herun ku cara ngauping pamakah sareng nyababkeun sacara salah. Buku ieu ngajarkeun UNIC, khusus Debian (Ubuntu), Cunteung Bash ,ek, hTML, CSS, Stiveg, sareng jumlah software sapertos git sareng ffmpeg, sareng sajumlah bungkus software sapertos git sareng ffmpeg, sareng saja pembancah software sapertos git sareng ffmpeg, sareng saja ffmpeg. Kuring ogé bakal ngajarkeun anjeun kumaha dagang crypadu Kuring bakal ngajarkeun anjeun salaku nganggo artos ti situs wéb anjeun ngalangkungan pariwara sacara ogé, kumaha péngkolan aplikasi sareng didamel dina konsumen anu umum pikeun milarian anjeun, sareng réngking di hiji pelanggan anu sanés waé. Kuring bakal ngajarkeun kumaha cara ngical software anjeun, paridikna, dingongan pikeun pelangguk pikeun jasa anjeun, sareng kéngingkeun inpormasi anu ngalangkungan Internét anu aya, sareng jalan saé. Kuring bakal ngajarkeun anjeun kumaha nyambungkeun data dina komputer méor tiasa dianggo pikeun anjeun sareng nyimpen data anjeun ber gali, email anu ceunat pikeun anjeun resepkeun ka anjeun. Buku ieu bakal di faksalitas ngeunaan nyebarkeun sareng ngabebaskeun media dina jumlah anu ageung, ti teks kanggo ngadamel video, sareng mesen anjeun saé dina cara anu pangsaéna., Sareng printasi anjeun. Anjeun ogé bakal diajar sababaraha Tip sareng trik ti kuring, ti tip, Diruksi Prakték sapertos Ketamanan sareng Fotografi Anu hadé pikeun ngagambarkeun sababaraha alat, damel, sareng aktif. Buku ieu disebut "praktisPanyajaran jeroer dumasar kana kaamanan sareng kaamanan ku "kusabab alesan: éta ngurus diajar tina milu, khusus pikeun situs nyata, kode wordio, gambar anu aya, gambar, gambar, gambar ieu bakal ngajantenkeun situs aktif, gambar anu bakal ngalacak dina téksénan komputer ieu anu ngagaduhanan dina téks praktip ieu, sareng modation weeding, Galuaran, Galaran, Gulung Anu Bakal Ngabarankeun Ningkatkeun, peningkatan reshancial, capinaf gambar gambar, sareng ieu tugas anu sanés sapertos Metrics Excics Tina gambar, atanapi jasa softwice, sami sareng poto Wéb, Éta log anjeun dina beungeut anjeun. Cukang tiasa ngadamel komputer Seras anu aman, komputer anu biasana bakal nawiskeun situs sareng aksés anjeun, henteu cekap, naon waé anu aman. situs anu anjeun anggo). Saha waé anu ngawangun parangkat lunak anu langkung aman ngagaduhan sababaraha rasa naon ieu nunjukkeun ieu nunjukkeun ieu. Perangkat lunak anu seru teu aman kusabab ieu pangguna sareng éta anu dianggo pikeun ngakses éta henteu salawasna sanés kabina, aranjeunna tiasa dina panangan anu seueur kana software sareng janten maksud di software sareng perangkat lunak kana software sareng ménuh usaha pikeun parangkat lunak sareng janten niat kuring. Ieu mangrupikeun fokus tina buku ieu. Komputer sacara manual sacara standar aman sareng token konci anu panjang, digedinta sareng SSSR atanapi Hotek Undasaha anu saé kalayan pamaréntahan wéb seni di usaha. Pindah wéb gaduh aksés ka Browser wéb pangguna, anu tiasa diaksés software anu paling kuat kusabab alat pangguna,. Témpo ieu tiasa téks rendang, buku anu anjeun tempo, teras tiasa ogé ngarékam gambar, audio sareng pidéo (sapertos poto pidéo Batktower, rorte. Nganggo sadaya alat di pembuangan anjeun, sareng buku ieu anjeun bakal ngalengkepan diri anjeun kalayan kanyaho pikeun ngawangun situs wéb anu aman, sareng sadayana sistem komputer anu aman pikeun anjeun, sareng tawaran anjeun, sareng tawaran
Dimana ngamimitian: Anjeun ngarepkeun skip maling bagian anu kuring ngamimitian buku ieu, atanapi bagian naon waé anu anjeun butuhkeun, hususna upami anjeun ngagaduhan pangalaman anu nganggo aksés sareng conto praktékna. Upami anjeun teu ngagaduhan pangalaman dina kodeu nyerat, kuring pisan nyarankeun anjeun maca sadaya buku ieu, sareng nyarankeun anjeun maca bagian saméméhna, pikeun mastikeun buku ieu leres pikeun anjeun. Upami buku ieu henteu leres pikeun anjeun, mertimbangkeunakeun berita kana babaturan atanapi dulur anu bisa kabetot ngeunaan pangembangan wéb nyalira, sareng ngawaskeun ka guru. Mimitian dimana anjeun bakal, unggal bagian tina buku ieu bakal kapaké upami anjeun badé ngawangun aplikasi anu mangpaat, sareng masihan yén aplikasi ahir anjeun lumangsung ku pangguna ahir: terang palanggan. Ayeuna anjeun kenal kuring, anjeun terang buku ieu, sareng anjeun siap dimimitian. Pikeun ngamimitian, ngajungan komputer (bahkan laptop anu paling murah tina kotak simpen, Amaxon, atanapi stabil desktop anu abus, teras nyetél kana cara anu dianggo pikeun anjeun.
Kumaha cara maca buku ieu: Téks anu disorot, nunjukkeun yén téks milik paréntah pituduh, dimana anjeun bakal nyerat kodeu anjeun. Pandan pituduh mangrupikeun keyboard anu beurat sacara fokus sareng peryogi sakedik kanggo henteu ngaklik, ngagancangkeun alur kerja sareng ngajantenkeun barang langkung gampang di anjeun.
Ngamimitian: Hayu urang beuleum. Urang bakal mimitian ku kode gedong dina mesin lokal sareng mimitian tanpa ngawangun halaman wéb anu nyambung ka Internét. Ieu langkung aman pikeun ngamimitian, biaya nanaon, sareng gampang pikeun anjeun. Gumantung kana sistem operasi anjeun, kéngingkeun kana cangkang bash bakal béda bénten. Pikeun Mac OS, kuring nyarankeun masang mesin virtual dina titik ieu, upami anjeun bakal nampi kasaluyuan anu paling dipikaresep sareng mesin virtual. Rumana panyajian sapertos bivali sareng paralells tiasa ngajalankeun mesin maya pikeun anjeun, sanaos tiasa dipasang ubagi langsung dina kauntungan gancang, geremar dina ngalaksanakeun mesin, streverinal. Upami anjeun nganggo Linux atanapi jandela, anu kuring nyarankeun, kedahna gampang nyiptakeun proyék. Buka terminal anjeun, saluyukeun ukuran sapertos anjeun ningali pas, sareng mimitian nuturkeun 2. Upami anjeun nganggo windows, punten tuturkeun léngkah 1.
Léngkah 1: - Pamaké windows hungkul Dina Windows, buka paréntah pituduh salaku administrator sareng ngetik wsl -install
Lengkah 2: - Teruskeun di dieu, atanapi skip Lengkah 1 ka dieu upami anjeun henteu nganggo Windows Dina tertantal kabuka, (gumantung kana os anjeun, disebut ubuntu dina windows, Terminal Dina Mac atanapi Linux, atanapi nami anu sami), Mangkat ku cara nyiptakeun proyek. Urang ngalakukeun ieu ku paréntah Mkdir, anu nyiptakeun diréktori. Upami anjeun kedah nyiptakeun diréktori pikeun nyimpen proyék anjeun, anu disarankeun, paké paréntah CD pikeun ngarobih kana diréktoriana sareng sareng
CD / Jalan / Diréktori / Diréktori - Jalur nyaéta polder (file) anu nembé diréktori tujuan anjeun, jalur standar anjeun mangrupikeun ~ Robih kana diréktori standar, ngetik CD atanapi CD ~ Camana MKDir - Ganti "conto" sareng nami diréktori
Ayeuna anjeun gaduh diréktori damel pikeun proyék anjeun. Sarua salaku hal anu penting pikeun diréktur langkung penting anu disimpen bisi anjeun kedah ngalih ka mesin anu béda atanapi teras seleck kode anu anjeun parantos siap diréktak. Tapi ngawangun skrip butuh kodeu, sareng kode kedah otomatis janten otomatis janten gunana. Janten hayu urang ngawangun skrip pikeun ngawangun skrip heula. Hayu urang mimitian ku nyiptakeun skrip sareng ngajantenkeun dikonsumsi. Kami bakal nganggo Sudo, Chmod sareng toél pikeun ieu, sareng nyauran naskah "kafript".
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Ayeuna kami parantos nyiptakeun script, janten tetep, sareng siap ngiced deui. Nano mangrupikeun reditor téks anu bakal ngantepkeun anjeun ngédit teks tanpa asup, anu langkung gampang tibatan nganggo antarbeungeut pangguna pangguna grafis. Ngédit file sareng Nano, nganggo Nano teras jalur kana file. Pikeun ngadamel naskah anu ngajantenkeun skrip, éta cukup mirip pikeun nyieun naskah kami di tempat munggaran. Kami bakal nganggo kode anu sami sapertos di luhur, ngagantikeun nami skrip, "ASCRIC" kalayan parameter dalil, $ 1. Ieu ngamungkinkeun urang nyauran skrip ku ngetikkeun ngan saukur nilkrip Ikkrip Ikkrip Kodeu di Nano kedah sapertos:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Sareng tutup Nano, kami tiasa nyimpen konci kadali sareng pencét X, teras y teras nunjukkeun file, sareng pencét uih deui. Ayeuna tinimbang ngetik tilu paréntah ieu pikeun ngedit skrip, kami bakal tiasa ngetik sudup kladal pikeun ngedit skrip deui. Ieu dianggo! Sareng skrip anu sanés tiasa dijaga kalayan nelepon dina cangkang. Hayu urang ngahemat karya urang ayeuna: Hayu urang nyerat skrip cadangan pikeun ngahemat skrip anyar kami teras teraskeun dina diréktori proyék kami, bari ogé nyadangkeun samak bintik.
sudo ascript backup
Ayeuna, di Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Dimana / jalur / / diréktori mangrupikeun jalur kana proyék anu didamel ku Mkdir. Salajengna dina éta urang bakal diajar kumaha niron jalur anu siga ieu nganggo gelung sareng daptar, anu ngagaduhan kode, tapi kanggo ayeuna ulah alami sareng sababaraha garis. Pikeun ngajalankeun skrip ieu sareng cadangan kode anjeun, simpen file di Nano kalayan kontrol + x, y sareng uih, sareng ngetik kana cangkang anjeun
backup
Upami anjeun dipenta pikeun sadayana kecap konci nalika maca buku ieu sareng kieu sareng cangkang, punten lebetkeun kecap konci pangguna anjeun leres, anjeun bakal ngagaduhan tilu nyobian sateuacan anjeun kedah ngarahkeun ulang paréntah. Anjeun tiasa nganggo panah ka luhur sareng ka handap pikeun paréntah ngagulung sareng edit aranjeunna, kedah anjeun kedah ngajalankeun nanaon dua kali. Geditik pencét sareng turun sacara intermitten milih paréntah, sateuacan ngédit paréntahna, jampar kénca kénca sareng ngahapus konci ogé keyboard, sareng ngajalankeun éta.
Gening! Anjeun junun nyiptakeun skrip cadangan anu saé anu nyadangkeun dua skrip cangkang penting dina diréktori damel anjeun. Urang tiasa mindahkeun hal-hal di sekitar sapertos proyék janten langkung ageung, tapi ieu dianggo kanggo ayeuna. Hayu urang ngalihkeunkeun dina awan, urang bakal nganggo Gitub pikeun (sanaos aya seueur solusi buap, Éta ogé disarankeun deui ka sékrési, konci. ITOTAL KANGGO Jalan Scressing Software anjeun, khususna sakumaha urang héran pikeun instansi linju anu sakapeung nyandak layar anjeun henteu tiasa dicadangkeun. Beuki gampang sacara otomatis.
Upami anjeun parantos ngagunakeun mesin virtual anu mactu Dina titik ieu, kuring ngadedo nganggo mesin maya anu ubunual dina titik ieu sabab bakal ngajadikeun kahirupan anu nguntungkeun pikeun ngawangun situs pangajaran anu peryogi supados jamuan anjeun. Kami bakal ngarobih kodeu kana situs Wéb dina waktos anu caket, tapi urang hoyong mastikeun aya sababaraha lapisan kaamanan balik aya funses skilla supados. Upami anjeun masih hoyong nganggo Mac OS, anjeun ngabagarakeun milari sareng masang bungkusan anu diperyogikeun tapi tapi henteu aya alternatif pikeun unggal pakét buku atanapi séri anu ditutup.
Hayu urang nambihan sababaraha paréntah pikeun ngalakukeun pagawéan kami sareng skrip cadangan ku ngajalankeun cadangan paréntah Sudo.
# ...
Sakali deui, kontrol x pikeun ngahemat.
Ayeuna urang kedah ngalakukeun sababaraha konfigurasi waktos pikeun proyék ieu. Kusabab éta bakal janten proyék GIT, kami henteu kedah ngetik unggal-unggal paréntah unggal waktos urang nyebarkeun tina gudang GIT, tapi urang nuju ngagantung ieu nalika urang nyerat penantung ieu nalika urang tipu iklan ieu. Pikeun ngamimitian, hayu urang mastikeun yén kami dina diréktori anu leres sareng initialize jit git sareng ngahasilkeun konci ssh.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Saatos urang ngetik SSH-Keygen, konci anyar kedah disimpen di folder bumi dina hiji folder. Éta disebut ID_RSA.Pub. Hayu urang mendakan konci ieu sareng nyalin éta. Ningali éta,
cd ~
cat .ssh/id_rsa.pub
Salin téks anu dipulangkeun ku paréntah terakhir, sareng ngadamel akun sareng panyadia GIT anjeun (idéal gitlub), sateuacan nambihan konci ssh kana akun anjeun. Sakali anjeun gaduh akun, klik menu katuhu sareng pencét Setélan, saencan tambah konci SSH anjeun dina konci SSH sareng GPG. Pilih Tambahkeun Konci SSh sareng tambahkeun milik anjeun ku pasting éta sareng masihan éta judul, sateuacan nyimpen sareng nyimpen sareng wangsit ka Gitub pikeun nyiptakeun gudang anyar. Ieu sami kanggo panyadia APL sanés, anjeun kedah maca dokuméntasi na. Dina konfigurasi ulangan handsori, masihan panyumbihan nami déskriptif sareng mutuskeun naha anjeun hoyong nyebarkeun éta, sareng pastikeun ngonplukurasi henteu aya file pikeun citakan. Sakali gudang didamel, nyalin clonin sareng URL SSh, sareng témpélkeun kana paréntah di handap ieu.
git remote add git://… (your remote URL)
Ayeuna anjeun tiasa ngahalangan deui ka tabungan anjeun nganggo CD, anjeun bakal énggal pisan. Cobian skrip cadangan ayeuna sareng cadangan
Saé! Ayeuna urang tiasa kéngingkeun coding. Hayu urang pasang Django ayeuna urang gaduh soca anu saé di bash sareng git. Django bakal ménta kami otomatis nempuh software kami, Bash tiasa ngalakukeun ieu teuing tapi django anu langkung saderhana (éta tiasa ditumpuk sareng dikeladihkeun deui).
Pikeun masang parangkat lunak di Ubuntu, urang bakal nganggo sudo apt-kéngingkeun. Mimiti, hayu urang ngomuneun sareng ningkatkeun parangkat lunak anu kami parantos ngagaduhan. Ieu tiasa dilakukeun sareng sudo apt-kéngingkeun update sareng sudo apt-meunteun upgrade. Saterusna, hayu urang pasang Python sareng lingkungan maya, Home Kode kami, kalayan paréntah di handap ieu: sudo apt-pasang python3-ischon3 Venv
Ieu sadayana anu anjeun kedah angkat sareng Django dina segara software pasang dina conto Ubuntu. Pikeun jandéla sareng Linux ieu kedah beuki lempeng, tapi pikeun man anjeun meureun rék masang mesin virtual sareng Desemberon sapertos Moderator Bilka. Ubagi kratis dina hal ieu sabab parangkat lunak situs webs dijalankeun sareng éta ngamungkinkeun éta acan semboda anu soca.
Hayu urang ngali kana Django.
Dina diréktori kami deui, nganggo CD:
python -m venv venv # Nyiptakeun lingkungan virtual dimana kodeu disimpen
source venv/bin/activate # Ngaktifkeun lingkungan maya
django-admin startproject mysite . # Dimana My Coure mangrupikeun proyék kuring dimimitian dina diréktori ayeuna.
Django ngan ukur ngobrol, sabab Dijango yén ngostuah pangladén Wéb sareng mangrupikeun sadaya anu urang kedah nampi situs wéb lokal sareng ngajalankeun. Ayeuna urang parantos Djuboed, hayu urang ngéditkeun setelan sakedik janten ngerjakeun kumaha cara urang peryogi. Mimiti, hayu urang nyiptakeun aplikasi anyar
python manage.py startapp feed
Anjeun bakal perhatikeun aplikasi anu munggaran disebut feed. Aplikasi kudu disebut naon waé anu anjeun resep, sareng kami bakal nyiptakeun aplikasi anyar, tapi nami unggal aplikasi kedah konsisten unggal waktos aplikasi. Pikeun nambah aplikasi anyar, kami bakal bakal edit setélan.Py di Diréktori anu sanés dina aplikasi anu diciptakeun, dingaranan dina ngamimitian, Applesky. Nganggo Nano,
nano app/settings.py
Dina setélan, dipanggihan masangkeun_apps_apps and Misirkeun [] kana 3 garis. Nganggo opat rohangan dina garis tengah kosong, tambahkeun 'eupan', atanapi nami aplikasi anjeun. Bagian ieu setelan.py kedah siga:
INSTALLED_APPS = [
'feed',
]
Sateuacan urang hilap, hayu urang nguji anu Django damel. Nganggo paréntah python éktip.py runserver 0.0.0:8, urang tiasa ngajalankeun anu pangladén wéb (tiasa ningali paréntah nganggo kodeu sareng komputer sanés.
Ayeuna, Hayu ku Nulis sababaraha kode Python. Django ngagaduhan tilu komponén utami, sadayana diinget ku kodeu sacara saliwatan. Komponén disebut model, tempoan sareng citakan, sareng masing-masing aya dina tingkat langkung luhur sateuacan halaman halaman sateuacan dipilangkeun ka pangguna.
Modél ieu mangrupikeun kode anu nyimpen inpormasi dina database pikeun papasangan, disebagian sareng rendas.
Témbongan mutuskeun mutuskeun kumaha usahana tiasa dibuang, manipated, sareng dirobih, ampir unggal pawasan bakal nganggo modél langsung.
Template mangrupikeun kode HTML sareng sababaraha lonceng tambahan sareng whistles anu disebut basa template. Nemplat dikaluarkeun ku pandangan anu dieusi kode Python Python sapertos Model sareng Épékan (senar USudall) ti pandangan.
Django gaduh komponén sanés ogé, kalebet tapi henteu dugi ka:
Setélan, anu ngonfigurasi aplikasi nalika urang bahas.
URLs, anu pola anu panggunaan pangguna pikeun mangsa aksés ka bagian-bagian utama.
Bentuk, anu ngartikeun kumaha inpormasi anu dikirim ka server anu ditangani sareng dilayang ka pangkalan data ogé ka pangguna. Ieu mangrupikeun dasar inpormasi ngolah di sisi pangladén, sareng tiasa nampi jinis inpormasi komputer, lagu anu pohara / jumlahna boolean).
Template, anu henteu kodeu sareng talcat analis sareng Jandungan Emas antara python sareng HTML, hartosna inpormasi python anu tiasa didamel sareng alat anu jauh.
Berkas statik, anu biasana JavaScript sareng éta applarsi anu panglaman palayan sareng dikaitkeun template.
Ber anu méci, anu server fungsi atanapi anu servasat sacara éksternal anu diigireun, atanapi ngan ukur ditulis ka server sateuacan diolah sareng dikirimkeun anu sanés (hiji hosting.
Tengah, anu kering anu dijalankeun dina waktos anu sareng unggal pandangan sareng dianggap "kalebet" dina tempoan.
Konussor konték, anu ngolah kontéks unggal tur anu dianggo pikeun nambihan kontéks tambahan.
Tes, anu manajemén anu mana pangguna atanapi nyuhunkeun pas syarat tangtu sateuacan pandanganna disayogikeun.
Pamisah, anu ngarékjahkeun ka kumaha situs Webaleet sareng ngaréspon komunikasi.
Adin, anu dianggo pikeun ngadaptar model sahingga aranjeunna tiasa manipulasi sacara signet dina kaca Admin Ad admin Admin, anu PASABase tiasa dikaluarkeun.
Seledys, anu ngahartikeun tugas asynchronous bagian tina kode Django tiasa dimimitian ngajalankeun sateuacan teraskeun teraskeun kana tugas atanapi garis kode.
Django tiasa gaduh seueur komponén sanés, anu urang bakal ngabah jetetan di dieu. Aya seueur cara pikeun ngadamel Django langkung fungsi, tambihan webock di, anu dibéréskeun, dina saluran komunikasi, dimana seueur panempoan, dimana perbatarana, dimana seueur kode anu diatasi. Pilem Vilid wawak kusabab biasana biasana nyatakeun unggal kode anu khusus pikeun pola URL khusus, atanapi hiji bagian pangladén.
Mimiti, hayu ngajelajah fungsi. Pilem Securs dimimitian ku pangséran tunjuk code anu bakal dianggo dina pandangan fungsi biasa atanapi kelas Fungsi. Pintonan anu pangbasajanna anu dihartikeun ku definisi Fungsi DR, sareng kartu mulang wotprpresse ku citakan dasar. Hayu urang mimitian ku netepkeun pandangan dasar pikeun mulang téks "Sampurasun". Émut yén unggal waktos anjeun nambihan kode saatos perniksian sapertos beg, upami, sedengkeun, kanggo, jsb, anjeun kedah nambihan 4 frafi kanggo unggal fungsi anjeun. Kami bakal kéngingkeun naon hartosna ieu.
Ti diréktori situs kami, edit file feed / pandangan.Py.Py ngagunakeun Nano sareng nambihan garis di handap ieu pikeun tungtung file.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Django's httprethatse Django réspon sareng senar téks, dilambangkeun sareng buka sareng nutup '. Unggal waktos anjeun ngaliwat inpormasi ka fungsi atanapi kelas, sapertos pamundut atanapi senar, anjeun kedah nganggo parenthes (, bukina).
Ieu sanés sadayana urang kedah ningali pandangan kami. Tangtosna, kami teu kasebut bébéja dimana panémbalanana persis, kami tetep kedah ngartikeun jalur anu ditingali anu kedah dirajut. Hayu urang mimitian ku netepkeun jalur dasar dina aplikasi / URLS.PY, sareng kami bakal asup kana grup jalan engké.
Di App / Urls.Py, tambahkeun garis saatos pernyataan impér saatos awal impuran urang ngan didamel.
from feed import views as feed_views
Ayeuna, hayu urang ngartikeun pola tampilan. Pola tingalur ngagaduhan tilu komponén, komponén jalur, anu ngawartoskeun server dimana tempoan anu aya dina web navigasi pikeun ditingali ku panempoan anu langkung saé atanapi teraskeun sareng nami anu langkung saé. Éta matak akal ngalakukeun hal ku cara ieu sareng janten fleksibel, sabab kode anjeun bakal ngagaduhan tatangga anu langkung kalenturan sareng nemasan pikeun dijurus sareng gampang tiasa dianggo. Ieu naon pandangan anjeun bakal siga, anjeun tiasa nambihan ieu kana urlpless = [bagian aplikasi / urls.py. Pola panempoan didefinisikeun ku tilu komponén anu ngajelaskeun di luhur, kalayan jalan anu disebut jalan. Pola URL anjeun mangrupikeun daptar, sahingga pastikeun teras teras-terasan unggal-unggal barang di aranjeunna kalayan koma, sabab ieu misah masing-masing. Unggal barang ogé kedah nganggo garis énggal, sakali deui kalayan opat rohangan sateuacan éta, sapertos aplikasi dina aplikasi dina Setélan .py. Urang bakal ngartikeun komponén mimiti tina panempoan anu nganggo fungsi string kosong, pikeun nyiptakeun pandangan anu dijalankeun ku diréktori akar. URLS.PY anjeun kedah katingali sapertos kieu:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Ieu dasar pikeun nyiptakeun situs wéb sareng Django anu lengkep statik. Dina raraga ngajantenkeun situsna anu langkung dinamis dimana urang tiasa mimiti inpormasi cheurping, video, video, audio sareng seueur deui, kami bakal kedah nganggo model, anu kami ngajalajah deui. Kanggo ayeuna, hayu urang parios kode kami sareng ngajalankeun server. Pikeun mariksa kode pikeun kasalahan, dijalankeun:
python manage.py check
If there are any error messages, you should carefully review the changes you made to your app and see if there is anything that needs to be fixed, like an extraneous or lacking space, an extra character, an unclosed string, any typo, any accidentally deleted character, or anything else. Maca panalatah kasalahan (upami anjeun ngagaduhan hiji), anjeun kedah tiasa ningali jalan éta anu diciptakeun atanapi dientis koléskeun sareng file garis sareng anjeun tiasa ngalereskeun naon waé anu aya. Upami anjeun parantos ngaluarkeun masalah, ngajalankeun paréntah di luhur. Nalika software anjeun parantos siap ngajalankeun sareng damel, anjeun bakal ningali output "confirmasi henteu aya masalah." Ayeuna anjeun siap angkat. Jalankeun server sareng:
python manage.py runserver 0.0.0.0:8000
Ayeuna dibuka browser wéb sareng galrasi ka http: // Localhost: 8000. Anjeun kedah ningali téks anu dipulangkeun dina tanda kurung sareng tanda petik fungsi httpraptonse dina pandangan anjeun. Ieu ngan conto dasar, tapi upami anjeun ngadamel ieu waktos ayeuna, anjeun ngartos dasar kumaha lolu, Bash, python, sareng Django damel. He teras ngagali jero kana sababaraha modél basis, sareng ngajabajah kakawasaan kelas python dina nyimpen inpormasi. Lajeng, urang bakal mimiti nampi cengkraman dina html sareng CSS sateuacan kami ngajantenkeun situs kami anu ditingalikeun, fleksibel sareng aman ngagunakeun JavaScript.
Kelas disimpen dina modél.py aplikasi anjeun. Nganggo Nano, edit aplikasi / model.py sareng tambahkeun kelas anyar. Kelas dihartikeun sareng panyangka klasu sareng lulus supercass anu teu kaasup, dina bahan hal.model. Ngaran kelas sumping saatos-kadajaran, sareng saatos ati-kadajaran A: (usus) dianggo, sateuacan atana sanés sareng watesan esaringan sareng fungsina ditambihkeun di handap. Kelas urang peryogi ID anu urang tiasa dianggo pikeun nyandak deui sareng ngabéjaan, sareng éta butuh widang teks pikeun nyimpen inpormasi. Salajengna dina urang tiasa nambihan times, file, roolean (booleans (leres atanapi definisi anu tiasa ngabantosan milharan urang ngeunaan pangladen) sareng seueur deui. Hayu urang ngabongkar kode di handap ieu:
from django.db import models # Impor anu dianggo pikeun ngartikeun kelas urang sareng éta sipat
class Post(models.Model): # Definisi kelas urang sorangan
id = models.AutoField(primary_key=True) # Id modél kami, tombol anu otomatis anu dihaman pikeun bakal nyangka kami nawiskeun modél, tetep manual, sareng mangpaat nalika urang didamel ku Modél sakali parantos didamel.
text = models.TextField(default='') # Atribut toko urang kelas, dina hal ieu, sababaraha téks, ingkar kana senar kosong.
Tutup sareng simpen file sakumaha urang sateuacan réngsé.
Aya seueur widang sareng pilihan séjén kami bakal ngekspegowkeun nalika kami ngapdet kelas ieu salaku aplikasi kami mekar, tapi ieu mangrupikeun kabutuhan dasar sababaraha teks. Nanging, modél ieu moal jalan nyalira. Sakumaha anu dijelaskeun sateuacan, urang bakal peryogi pandangan ad adl khusus sareng pany damel modél ieu, sareng kami ogé bakal damel sareng citakan. Hayu urang ngajalajah formulir heula.
Pikeun ngartikeun wangun, edit aplikasi / form.py sareng Nano sareng nambihan garis di handap ieu. Kami kedah ngawangun dua impor, kelas bentuk kami, ogé model anu didamel anu kami dilakukeun (feed.dhods.Post anu disebut lapis bentuk. Bentukna ogé tiasa ngagaduhan fung awal anu nyetél dumasar kana inpormasi dina pamundut, modél atanapi urang bakal ngajalajah ieu engké.
Modase modél mangpaat kusabab aranjeunna tiasa nyiptakeun modél atanapi ogé édit model, ku kituna kami bakal nganggo aranjeunna. Hayu urang ngartikeun hiji dina form.py di handap.
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',)
Ieu dasar naon bentuk sareng modél katingalina. Bentuk modél ieu tiasa dianggo pikeun instantasi atanapi ngedit pos, ngarobih téks anu ngandung. Urang bakal milarian netepkeun formulir ieu kana pandangan salajengna. Mimiti, hayu urang ngadamel migrasi sareng milarian kotak ténjub perdasanjing tiasa berinteraksi sareng modél nalika éta jalan. Pikeun ngalakukeun ieu, ngajalankeun paréntah di handap ieu:
python manage.py makemigrations
python manage.py migrate
Ieu bakal sakedap pikeun ngaéksekusi, tapi sakali, éta bakal ngamungkinkeun anjeun aksés dina tampilan, Toolware, atanapi tempat anu sanés dina parangkat lunak. Hayu urang teraskeun ku pandangan dimana urang tiasa ningali modél kami. Édit / Views.py sareng nambihan kode di handap ieu, sapertos anu dicatet. Anjeun moal kedah nambihan nanaon saatos # tanda, éta kode mangrupikeun koméntar anu dianggo pikeun ngalambangkeun inpormasi ngeunaan kode. Kami nuju bakal dimimitian ku ngimpor modél kami dina panempoan, sareng nambihanana kana kontéks dimana urang tiasa ngabersihan dina template sapertos daptar. Salajengna, kami bakal nambihan template dimana urang tiasa ngabantosan bentuk sareng modél nganggo kancing pikeun nyiptakeun obyek anyar dumasar kana pangladén. Hurung kacatet, ku kituna hayu urang ngan ukur léngkah-léngkah. Sateuacan urang réngsé panempoan, hayu urang nyiptakeun témlate anu ngan ukur ngabubarkeun modél mode sareng pastikeun urang tiasa ningali éta ku nyiptakeun cangkéng. Ieu kumaha pandangan anu kedah katingali:
posts = Post.objects.all() # Pertanyaan sadaya tulisan dina database dugi ka ayeuna
Ieu sadayana katingali saé dugi ka kami angkat ka handap. Render, Nilai balik ku fungsi tinimbang dina réspon hungkul sapertos conto sateuacanna, teras milih pamariksaan salaku asupan pertama, upami aya kontéks, anu tiasa diteruskeun dina databat anu ditingalikan dina fungsional), sareng uih épék. Template bade janten dokumén HTML nganggo sakedik basa anu disebat Jinija2, anu renders inpormasi pymon kana heml.
Pikeun ngamimitian nyieun tudulna, janten dua dirancang dina pakan.
mkdir feed/templates
mkdir feed/templates/feed
Teras, ngedit template dina diréktori di luhur, eupan / témplat / eupan, sareng tambihan kode pikeun conto ieu. Hayu urang tingali kana template pikeun conto ieu.
Ieu template anu saderhana pisan. Éta ngahartikeun luka tag HTML, tag jinis dokumen tag dokumen, tag awak kalayan judul legenda, istirahat tag anu nambihan layar dina daptar tulisan salaku graftel. Ieu sadayana peryogi pikeun ngecas tulisan, tapi teu aya di database acan. Hayu urang nyiptakeun sababaraha cangkang. Urang tiasa ngajalankeun cangkang sareng ngatur
python manage.py shell
Ayeuna, hayu urang impor modél pos kami
from feed.models import Post
Salajengna, urang bakal nyiptakeun pos basajan kalayan tali sareng kaluar cangkang. String tiasa janten nanaon, salami téks anu sah.
Post.objects.create(text='hello world')
exit()
Anu lami, urang kedah nambihan pola url pikeun pakan kami. Kusabab aplikasi phy urang bakal nganggo sababaraha URLs sareng urang hoyong nyimpen peran file alit, hayu urang jieun urls lokal anu sanés sapertos kieu:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Kami ogé kedah ngedit urls.Py dina aplikasi dasar, naon anu urang mutuskeun pikeun nyebatkeun éta, ieu mangrupikeun diréktori anu pangheulana urang nyiptakeun. Édit aplikasi / App.py sareng tambahkeun di handap ieu pikeun pola Url
from django.urls import include # di luhur
# ... kode sateuacana di dieu
Ayeuna, nalika urang ngajalankeun server sareng python A masalah Inc.py, kami bakal ningali yén kami nyiptakeun sabab urang gaduh model, sareng template url, sareng barang-barang dina database. Salajengna, hayu urang ngalaksanakeun formulatna anu didamel sareng ngawitan nyiptakeun tulisan urang sorangan. Tapi sateuacan urang nyerat seueur kode, hayu urang nyieun cadangan nganggo naskah anu nyerat sateuacanna, cadangan. Jalankeun naskah ieu di cangkang, antosan sababaraha waktos, sareng sadaya kodeu bakal ngadeukeutan kana gudang git urang.
backup
Ngalaksanakeun formulir anu kawilang basajan. Kami bakal ngéré wangun urang, tambahkeun rupa penyeujaan pamenta anu ditingali, teras nyimpen pos di database sateuacan alihan ka pandangan anu sami. Urang tiasa nganggo fungsi alihan kami parantos diimpor, sareng fungsi sanésna disebat pribadi pikeun nampi URL kanggo pola pandang panempoan. Kami bakal nyangka ieu sareng senar eupan: nyanyakan 'kusabab henteu aya pola tola anu kalebet nyaéta feed, sareng pandipan ogé disebut eupan.
posts = Post.objects.all() # Pertanyaan sadaya tulisan dina database dugi ka ayeuna
if request.method == 'POST': # Ngadegkeun pamundut pos
form = PostForm(request.POST) # Ngadamel conto bentuk sareng nyimpen data ka éta
if form.is_valid(): # Nilai formulir
form.save() # Simpen obyék anyar
return redirect(reverse('feed:feed')) # Alihan kana URL anu sami sareng kéngingkeun pamundut
'form': PostForm(), # Pastikeun ngalangkungan bila kana kontéks sahingga kami tiasa ngabengkabkeunana.
Ayeuna, urang kedah ngapdet template pikeun janten formulir anyar. Urang tiasa ngalakukeun ieu ku ngagunakeun
Hayu urang ngarobih ieu. Aya kelas bentuk énggal, token, bentuk kuring, sareng tombol anu kenging. Cukup saderhana, tapi nalika urang ningalikeun, urang tiasa ngajantenkeun éta katingali langkung saé. Éta dianggo, urang tiasa masir tulisan anyar sareng bentukna sareng aranjeunna ayeuna disimpen dina databés. Aya sababaraha hal anu badé di dieu. Kami nganggo tag HTML kanggo nyatakeun yén dokumen mangrupikeun dokumen Wilml, kami nganggo TM tempate TA ({% ... LAG),} {.... ... * {... Urang ogé gaduh gelung pikeun ngudag téks nganggo tag blok sareng tag template. Block tags are really important because we can define how sections of the template are rendered with them, and template tags are the basis of how we put variables into our code.
Ayeuna urang kedah ngadamel aplikasi kami katingali saé, sabab pikeun ayeuna ayeuna katingali sacara dasar. Urang tiasa ngalakukeun ieu ku ngagunakeun CSS, boh dina garis, atanapi di kelas dihijikeun ka unggal objék dina dokumén. CSS saé saé sabab éta nyarioskeun ka sakumna dina halaman kumaha kuing katingali, sareng tiasa janten katingal deui. Aya sababaraha pustaka anu tiasa ngalakukeun ieu, tapi pribadi kuring ka bootstrap.
Bootstrap tiasa diunduh tina halaman wéb na,Boboottrap.com/. Sakali di dinya, pencét tombol pikeun maca Doksi in instal, sareng nyalin kode tina kalebet di game CDN. Anjeun peryogi kodeu ieu di luhur dokumen HTML anjeun, dina hiji tag anu disebut sirah. Ogé, Hayu teras ngadamel template base waktos supados henteu kedah ngarobih tautan ieu dina unggal template.
Jieun diréktorori anyar anu disebut témplat sareng témplat MKDir, teras ngédelkeun template / Fort.html.
Éta kedah siga kieu:
Pastikeun kanggo nyalin CSS sareng JavaScript, The kitu sareng file. Impian, sabab kami peryogi bakal JavaScript kanggo nyieun situs kami langkung fungsina fungsi kami.
Ayeuna, hayu urang uih deui ka cangkang sampah sareng ngajalankeun paréntah gancang. Inget, upami anjeun kantos kedah ngaksés lingkungan virtual, ngetik sumber venv / bin / aktipkeun. Ieu bakal ngantep anjeun pasang bungkusan Python sacara lokal dina cara anu ngantep Django. Pikeun masihan bentuk kami anu dibangkitkeun ku kelas Djumpstrap ka Djumpstrap, urang bakal nganggo pakét Python anu disebut bentuk garing. Urang tiasa ngundeur ieu sareng paréntah di handap ieu
pip install django-crispy-forms
Sakali ieu dipasang, tambahkeun kana setelan.py
# ... kode sateuacana di dieu
Ayeuna, bain dina template feed urang, urang tiasa ngaleungitkeun sababaraha hal. Hayu urang miceun mimiti sareng ahir dokan sareng ngagentos sareng warisan ti template dasar kami, nganggo ngalambatkeun sareng watesan blok. Ogé, urang bakal nambihan panyarét template sareng beban sareng saringan template kana wujud. Anu pamungkas, hayu urang nambihan kelas Bootstrap ka tombol dina bentuk supados tiasa katingali siga tombol. Anu kedah sapertos kieu:
Geulis! Éta rada kodeu anu parantos. Teras, urang kedah nyarioskeun éta sareng pastikeun, urang tiasa ningali yén sadayana katingali saé, sareng ogé yakin sadayana tempat damel. Jalankeun pangladén sapertos per petunjuk sateuacana sareng pastikeun yén situs katingali sareng damel. Pakaryan hébat! Anjeun siap angkat ka Léngkah salajengna, dimana kami bakal nambihan fungsi login asup pangguna nganggo URLs anu sami, bentuk sareng template. Template basa penting, sareng urang bakal terus ngarobih deui gancang-terusan, tapi kanggo ayeuna éta dilatih ku situs kami anu langkung diaksés ku anjeun.
Pikeun ngalakukeun ieu, bakal kedah nganggo modél pangguna anu diwangun pikeun Djubo. Model Pamakéan nyaéta modél databés, sapertos pos kami, anu tiasa dipangang ngarék ku pesen pangguna kana situs wéb. Diharduh, sateuacan urang nyebarkeun situs ka Internet, urang bakal mureran modél ieu nganggo model anu sanés daya, sareng ngawangun kaamanan anu tambahan pikeun phishing kaamanan tambahan pikeun phishing kaamanan tambahan pikeun phitat kaamanan tambahan pikeun phishes kaamanan tambahan pikeun phishing kaamanan tambahan pikeun fexin. Kami bakal dimimitian ku cara anu diwangun dina bentuk login anu Django nyayogikeun. Mimiti, hayu U nyiptakeun aplikasi énggal anu kami bakal dianggo pikeun ngaberungkeun tenderungan sareng ningali kanggo halaman login dasar. Kami ogé bakal nyiptakeun aplikasi anu sanés pikeun ngagambarkeun tantangan login teras neraskeun aplikasi, kalebet hiji sudu, pangakuan cacat, taxisasi fakta.
Kami parantos ngobrol ngeunaan ngamimitian aplikasi. Tina diréktori kami, jero lingkungan virtual, lulus ngahubungkeun dalil ieu
python manage.py startapp users
Ayeuna, urang kedah diréktak pikeun aplikasi anyar. Hayu urang mimitian ku nyiptakeun pandangan anu diréktori anu pakait sareng login pangguna. Django parantos ngawangun dina pandangan login pangguna, tapi ieu moal cocog kanggo urang kumargi urang peryogi pintonan khusus, anu langkung saé dilakukeun kalayan definisi.
Dina panempoan ieu, urang bakal mimiti Di parios Deui gambar, Pasetkeun panyabarkeun diimpor di Dijango, ngabuktoskeun pangguna ka App Parépaana.
Dina pangguna / pandangan.py, tambahkeun kode di handap ieu
username = request.POST['username'] # Meunang nami pangguna sareng kecap konci tina pamundut pos
password = request.POST['password'] # Ngabuktoskeun kaaslianana
Ieu sadayana anu anjeun butuhkeun pikeun pandangan login dasar. Ayeuna, hayu urang nyiptakeun bentuk pikeun panempoan ku manjangkeun templatat. Kami bakal mimitian ku nyiptakeun diréktori anyar pikeun témplat dina folder pamaké.
mkdir users/templates
mkdir users/templates/users
Ayeuna, urang kedah ngédit pangguna / témlolusi / pangguna / login.html. Nalika kami, urang bakal nyiptakeun templatate pikeun ngajantenkeun pangguna pikeun ngadaptarkeun.
nano users/templates/users/login.html
Ayeuna, dina template,
Ieu dasar template login. Éta leres waé templatate sanésna dina struktur, tapi éta katingalina ogé rada sakedik nalika diterapkeun. Urang tiasa nyalin kodeu ieu ngawangun C tamlat anu sami anu disebut ngadaptar.HTML, dimana kami bakal ngarobih deui kecap sareng nganggo bentuk énggal anu urang ngawangun. Hayu urang ngadamel template heula. Édit pangguna / témplat / pangguna / ngadaptar.html sareng nambihan kode di handap ieu:
Ayeuna, hayu urang ngawangun data pikeun pendaptaran pangguna sareng bunderan deui ka pandangan sateuacan urang ningkatkeun logins pangguna kalayan modél. Kami bakal ngadamel bentuk dasar ieu pikeun ngamimitian ku, tapi ngan ukur ngalebetkeun detil sareng fitur kaamanan sapertos perjanjian sareng CAPTCHA di hareup. Édit bentuk sareng pangguna Nano / form.py, sareng tambahkeun kodeu ieu.
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']
Wah gaduh bentuk sejen di dieu, anu jalanna adil kantun. Ieu bentuk ngadaptar pangguna sareng landihan, email sareng kecap pagawéan, ogé situs widang konpirmasi. Catet yén bentuk ieu henteu dugi ka kelas luar moder.form, éta mangrupikeun jumlah modél anu hartosna éta hartosna éta ngagaduhan meta. Hiji keras ditetepkeun sami, sareng meja kelas netepkeun modél Forms pakait sareng sanés-sésa inpormasi anu bakal ditulis kana formulir. Kaseueuran kieu parantos aya di Django diwangun dina halaman pamaké, janten kami bakal nganggo yén akibatna pikeun kelas (diturunkeun dina tanda tandes).
Salajengna, kami bakal nguji pandangan pikeun ngadaptar pangguna, ayeuna urang gaduh formul sareng template. Ieu mangrupikeun kategori, sapertos anu sapertos dina panempoan tulisan énggal. Édit pangguna / pandangan.py sareng nambihan kode di handap ieu:
# ... impor
Hal ieu sadayana anu urang kedah kéngingkeun pangguna anu kadaptar, tapi urang kedah gaduh inpormasi sanés. Kami hoyong terang waktos pangguna anu kadaptar, waktos naon anu terakhir dina situs éta, sababaraha inpormasi, sapertos Biografi kami sareng ngagaduhan tulisan. Dina raraga ngalakukeun éta, kami bakal ngémutan modél.py dina dua aktip. Hayu urang mimitian ku ngédit modél feed. Éta kedah siga kieu:
from django.db import models # ... impor
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Tambihkeun dina garis ieu
Nengetan garis kadua anu ditambah kana file. Ieu mangrupa utama Konci asing, anu bakal ngabohuan masing-masingjim ka pangguna per pos, ku kituna urang tiasa mastikeun yén urang ngahémat tulisan waé sareng henteu aya masalah. Kami ngartikeun Konci asing ieu sareng kelas éta ngagambarkeun, pemelar motong pikeun mastikeun tulisan anu dihapus ku pangguna, null sareng alesan kosong, sareng nami anu dipilampah, sareng nami anu dipilari, sareng nami pangémbran pangguna pangguna, sareng nami pikeun ngiringan objek pos pangguna nu dilakukeun, sareng nami sanés pangguna pangguna pangguna pangguna. Anu urang tiasa ngaleungitkeun objék pos pangguna dina pangguna pangguna pangguna, sareng urang tiasa ngaleungitkeun obyék pangguna dina kiriman pangguna pangguna, sareng henteu tiasa dipancélkeun. Ngaran anu aya hubunganana, teu sapertos palapar.Authhor, panulis pos, masihan kami pangguna anu dipasang tulisan sorangan. Urang ayeuna tiasa kéngingkeun tulisan pangguna anu dilakukeun ku ngajalankeun pangguna.Posts.all (), atanapi panulis.post.all ().
Ayeuna, hayu urang kéngingkeun logat urang langkung kuat. Kami parantos damel situs kami langkung rentan sacara gampang ka purtas ku ngan ukur ngawatesan jumlah kali kami bakal ngijinkeun login kana situs, ieu cukup gampang. Hayu urang ngawitan nyimpen sababaraha inpormasi ngeunaan unggal pangguna sateuacan urang terus ngembangkeun aplikasi kami. Ngédit pangguna / modél.py, tambahkeun kode di handap ieu.
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='')
Catet yén model ieu saé sami sareng modél pos. Kami ngagaduhan standar, Waktuzone, anu bakal nguji ieu anu nyetél dina widang Datonime, sareng kami ogé gaduh karakterfmidayan sareng teks sapertos pos. Nganggo sadaya Timestamps ieu ngabantosan urang ngeri gaduh situs sareng ngartos panggunaan ieu, sareng widang teks wantun inpormasi kanggo rendah, atanapi panulis, dina webbah, dina wéb. Onetooneone Ku cara ieu, pangguna teu gaduh profil, bari aranjeunna ngagaduhan seueur kiriman.
Ayeuna, hayu urang ningkatkeun login kami sareng ngadaptar tampilan pikeun profil. Mimiti, édit pangguna / View.Py sareng fokus kana Témbongkeun Upat:
# ... impor
Profile.objects.create(user=user) # Pastikeun pikeun nambihan garis ieu, ngadamel profil kanggo pangguna
Ieu ngan saukur nyiptakeun profil kanggo pangguna, tanpa ngeusian inpormasi. Ayeuna, wantun parantos mastikeun Akun Panganggo teu tiasa asup teuing, atanapi sahenteuna kecap konci anu teu tiasa diusahakeun sering teuing, ku kituna badé ngomean tampilan login.
# ... impor
if user and user.profile.can_login < timezone.now(): # Catet yén urang ayeuna parios upami pangguna tiasa log in
else: # Upami login henteu suksés,
user = User.objects.filter(username=username).first() # Ieu mangrupikeun bagian dimana kami ngomean profil pangguna
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Janten aranjeunna henteu tiasa log deui pikeun sababaraha detik
Ieu mangrupikeun dasar kaamanan dasar. Pastikeun situs henteu tahan ka jalma ngan saukur pikeun nyobian unggal kombinasi sandi mungkin, atanapi sawangsing, atanapi sababaraha di antarana. Ieu moal frustasi kana pangguna biasa anu terang kodeu aksés sareng ngan ukur log in dina sababaraha alat, tapi éta bakal tetep seueur robot phishing kaluar tina aplikasi. Catet yén kami nambihan hiji upami pernyataan sareng variabel, cal_login, anu kedah waktos dina jaman baheula, sareng ngapdet nganggo nami pangguna anu sami. Ku cara ieu, pamaké jahat moal tiasa nebak sandi dimana waé caket gancang. Jajak detik dina datetime.timisedma () tiasa diropéa, sareng situs panunjang bakal langkung kuat sareng langkung sababaraha detik. Abdi nyarankeun 15 kanggo ngamimitian.
Inget, kami ngawangun nasrip cadangan otomatis, janten hayu urang teraskeun sareng nyadangkeun naon anu urang parantos saimbang ayeuna parantos mastikeun yén sadayana disimpen. Jalankeun paréntah:
sudo backup
Sakali deui, ieu bakal nyalametkeun karya anjeun. Kuring ngembangkeun cadit sering ngahémat pikeun nyalametkeun damel anjeun, sareng anjeun malah ku anjeun moal lalun ngajalankeun padamelan cadangan otomatis. Anjeun tiasa ngalakukeun ieu nganggo utilitas unix anu disebut Cron. Pikeun ngaktipkeun utilitas ieu, ngajalankeun paréntah di handap ieu sareng lebetkeun kecap konci anjeun:
sudo crontab -e
Upami henteu acan milih pilihan 1 pikeun Nano, editor téks anu anjeun kedah wawuh, sareng ngagulung ka handapeun file nganggo panutup panah nganggo kenop panah. Tambihkeun garis ieu:
0 * * * * sudo backup
Criss ngagunakeun pékata menit, jam bulan, bulan, dinten minggu, ti mana jam * atanapi nomer ngagambarkeun paréntah ieu. Nganggo 0 kanggo menit sareng * pikeun sésana pilihan, urang tiasa ngajalankeun paréntah dina menit munggaran unggal jam dina awal menit. Ieu ngamungkinkeun urang mundur kode otomatis. Sadaya padamelan Cron Nalika dibales sareng sudo ngajalankeun salaku akar, sahingga kami henteu kedah ngetik kecap kecap konci unggal jam.
Pikeun ngagampangkeun pikeun nyadangkeun kodeu kami tanpa nganggo sandi, hayu paréntah sandi kanggo paréntah cadangan urang. Urang bakal ngalakukeun ieu ku ngalaksanakeun paréntah di handap ieu sareng ngalebetkeun sandi:
sudo visudo
Ayeuna, hayu urang ngagulung ka handapeun file teras tambahkeun garis anu sanés:
ALL ALL=NOPASSWD: /bin/backup
Ieu ngamungkinkeun urang ngajalankeun paréntah "cadangan" salaku pangguna, tanpa sandi. Format pikeun ieu gampang, ngan ukur ngarespon garis sareng "sadayana sadayana = nopasswd: / bin /" sareng ditungtungan sareng paréntah, mun /
Ayeuna, hayu urang ngamimitian damel sareng email. Email leres pisan pikeun situs web, sabab caraara pikeun ngajaga situs wéb anu langkung aman, pariksa pangguna asli jalma atanapi jasa pikeun para nasabah. Seueur jalma anu sering cek internét pilihan pas dintenna, sareng nampi sagala jinis email ukiran kira-kira produk sareng jasa anu aranjeunna pikahoyong.
Mimiti, anjeun tiasa mayar jasa email anu bakal dianggo anjeun pikeun ngirim email tina domain anjeun sareng butuh kode minimal. Aya seueur layanan anu nawiskeun ieu, sapertos kerjas Google, moal aya pendaptaran, suratgun, sareng deui.
Upami teu kitu, anjeun gayana hartosna modeu email anjeun nyalira dina server anjeun ti mimiti. Abdi nyarankeun pilihan ieu, sanaos langkung kode sareng panginten tiasa nyayogikeun hosting khusus. Anjeun moal tiasa mimiti mésér seru sareng komputer di bumi anjeun panginten, maka hayu urang teraseng sareng nguji konfigurasi sareng kode pikeun ngirim server di awan Selamat.
Mimiti, ngédit setélan.py nganggo paréntah di handap ieu:
nano app/settings.py
Dimana aplikasi mangrupikeun nami aplikasi anu dipinampah sareng ngamimitian.
Tambihkeun garis di handap ieu:
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)
Pasti ngarobah ieu nalika anjeun parantos ngahijikeun aplikasi anjeun, kami bakal wolgis ieu engké. Setélan email_address kedah email anu anjeun hoyong kirim tina, sareng kecap konci (email_hrost_password) kedah disetél ka sandi anu anjeun ngahasilkeun pikeun pangladén. Kuring beban kecap konci tina file config pikeun jaga kodeu nganggo logika di handap ieu, di luhur garis ieu dina Setélan.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Teras, kuring parantos nyetél file YSson kalayan config dina /etc/config.json nganggo Nano sapertos kieu.
Ngédit file:
sudo nano /etc/config.json
Tambihkeun garis di handap ieu:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Kami bakal terus ngedit file config sareng nambihan sadayana kecap akses sareng konci anu kami bakal dianggo dina aplikasi. Pikeun ayeuna, hayu urang nguji kumaha cara ngirim email nganggo Python. Mimiti, hayu nyiptakeun template pikeun email pangamut urang tiasa ngirim ka pangguna kami, teras nempatkeun dina dina diréktori pamustaranana. Citakan ieu bakal ditulis dina HTML.
nano users/templates/users/verification_email.html
Email ieu cukup basajan. Éta peryogi kontéks pangguna, URL dasar pikeun situs éta, sareng ID pangguna sareng token anu dianggo pikeun pariksa email pangguna. Pastikeun kanggo netepkeun URL basa dina Setélan.Py Sateuacan kami nyerat sababaraha kode PYTHON pikeun ngahasilkeun template. Teraskeun sareng nambihan garis di handap ieu pikeun aplikasi / Setélan.py, caket awal.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Antukna, nalika situs anjeun siap pikeun Internét sareng anjeun nyebarkeun I, anjeun badé nyarios, anjeun badé nyayogikeun domain anjeun janten domain anjeun salaku nami domain anjeun ngagaleuh situs. Ieu mangrupikeun nami anu bakal anjeun ngetik dina navbar supados aksés situs anjeun. Pikeun ayeuna, anjeun tiasa ngantunkeun domain kosong atanapi nganggo tempat. Anjeun ogé hoyong ngarobih Situs_Name ka hiji nami anu badé masihan situs anjeun, anu milih anjeun.
Sateuacan urang ngirim email, hayu urang nyiptakeun generator token supados urang tiasa ngagaduhan token aktif akun anu henteu kantos kadaluar. Urang tiasa ngalakukeun ieu ku ngawangun sareng ngimpor token aktivasina anu siga kieu. Édit file:
nano users/tokens.py
Tambihkeun kode di handap ieu:
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()
Toki wilayah dasar ieu ngahasilkeun token urang tiasa ngirim pangguna dina url sareng pangguna tiasa dianggo pikeun pariksa emailna sareng aktipkeun akunna.
Salajengna, hayu urang tingali kumaha ngirim email. Nganggo Nano, edit pangguna / email.py.
nano users/email.py
Ngirim email Verifikasi HTML bakal siga kieu:
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)
Ieu saé saderhana. Kami ngimpor fungsi urang kedah ngirim email, ngaal piadén nganggo template, sareng urang undukeun, teras kami ngartikeun email ku akunna nganggo fonti. Anjeun bakal perhatikeun kami henteu acan katetepkeun fungsi pikeun ngirim surat, Kirim_html_email, acan, janten hayu urang nyerat kode / 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()
Ieu sakedik dikompleks, sareng kami henteu siap ngajalankeun sadaya kode ieu. Perhatosan urang netepkeun unub_link, tautan pangguna tiasa dianggo pikeun ngabédakeun tina email kami. Ieu penting, sabab pangguna kedah milih tiasa kaluar email urang Kacuali upami aranjeunna hoyong ningali éta, iraha waé. Kami ogé nambihan alternatif téks ka pesen kami, anu leres pesen HTML dipisahkeun tag HTML. Anu pamungkas, kami pareumkeun naha email dikirim, sareng upami henteu, kami nyirian dina profil pangguna anu henteu valid.
Hayu angkat deui ka modél pangguna ku kituna urang tiasa ngadamel ieu sadayana damel. Urang kedah ngartikeun fungsi pikeun ngahasilkeun link anu teu kéngingkeun, sareng ngartikeun lapangan boolean pikeun nyirian email anu henteu valid.
Mimiti, tambahkeun impor di handap ieu ka luhur pangguna / modél.py
nano users/models.py
# ...
Salajengna, hayu urang nambihan fungsi pikeun modél pangguna pikeun nyieun token sareng mariksa témpen anu digunakeun pikeun ngaktipkeun email éta dipaké kuarat éta. Dina pangguna / modél.py deui, tambahkeun kode di handap ieu ka tungtung modél (kode indén)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Sah kanggo 30 dinten
Ieu lumayan sederhana, kami nganggo sabagammsik, mana alat-alat ceurpransogrografi dasar, pikeun nyieun tanda anu bakal tuntas heula fungsi sanés pikeun parios upami éta leres. Kami nganggo token ieu dua kali, sakali pikeun pariksa email, sareng sakali kanggo tautan anu teu jelas.
Ayeuna urang ngagaduhan ieu, jaman terakhir padamelan anu kami kedah kedah ngalakukeun nyaéta di panempoan. Dina pangguna / pandangan.py, hayu urang nambihan pandangan email, sareng unsubscribe.
nano users/views.py
Mimiti, tambahkeun impip di handap ieu. Kuring maledug dina sababaraha tambahan supados urang henteu kedah ngimpor deui barang deui engké.
from .email import send_verification_email # Pastikeun ngimpor fungsi ngirim email verifikasi
Anjeun panginten gaduh bagian import ieu, tapi éta teu cilaka pikeun ngulang deui. Anjeun badé kamérkeun fungsi ngirim email verifikasi, ogé akun_activation_tomen ti pangguna.token, antara impor anu sanés.
Ayeuna, di handapeun file, tambahkeun kode di handap ieu:
# unsubscribe aranjeunna
# Disebutkeun alihan ka halaman login
# Ngadaptarkeun (pamundut, pangguna)
Ieu seueur kode. Hayu urang ngarobih. Fungsi munggaran, beresih sareng sederhana, unsubscribes pangguna tina daptar milist. Fungsi kadua ngaktifkeun email, sareng anjeun bakal bakal dibere kuring nambihan fungsi koméntar, Kantunwelesascone. Anjeun ngabagéal ngabagéal nganggo template Surat sareng Termarid Pikeun Ngagagend email terang ningali email terang, kuring hungkul. Fungsi anu terakhir kuring nyungkeun penting, kusabab email aktivasina tamat. Ku alatan éta, urang kedah nyayogikeun email produk sababaraha waktos. Urang tiasa nganggo bentuk dasar pikeun ieu, sareng nyauran fungsi pikeun ngirim email verifikasi. Sateuacan urang ngalakukeun ieu, hayu urang mastikeun kana kéngingkeun tempat anu mimiti, ku nambahan telepon pake kanggo tempoan ngadaptar. Tambahkeun garis ieu saencan alihan dina panempoan ngadaptar, bind ngadaptar, dina pamaké / pamanggih.
nano users/views.py
# ... (Saatos) DES ngadaptar (nyuhunkeun):
# ... (sateuacan) alihan (
Anjeun teu kedah nambihan garis anu munggaran sareng terakhir dina ujung kode éta, ngan pastikeun para pamungkas ngadaptarkeun témbong Ngirim email ka pangguna. Éta kedah siga kieu:
# ... impor
send_verification_email(user) # Pastikeun pikeun nambihan garis ieu!
Ayeuna, urang kedah nambihan formulir pikeun ngabéréskeun email aktivasina. Dina pangguna / form.py, tambahkeun formulir ieu:
# ... (impor)
Urang ogé peryogi némplat anu pakait sareng bentuk applation email ieu langsung. Hayu urang nambihan template ieu. Édit file:
nano users/templates/users/resend_activation.html
Salajengna, tambah kodeu di handap ieu ka file.
Whew, éta pisan! Ayeuna, nalika urang merianalkeun kode ka server kami, kami bakal tiasa ngirim email HNTNT sareng ngaktifkeun akun pangguna kalayan klik dina email. Kami ogé hoyong ngirim email kaatur anu wilujeng, sahingga hayu urang tingali kumaha. Balik deui dina pangguna / email.py, tambahkeun kode ieu:
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)
Ogé, urang bakal peryogi template kanggo ngecas sadaya inpormasi ieu. Dina websit abdi, templat katingal sapertos di handap, tapi anjeun terang deui pormat nalika anjeun resep.
Catet yén urang henteu gaduh panjang awak atanapi HTML tag, sabab urang nambihan ieu nalika urang nambihan tautan html unsubscrika. Ieu penting, tapi urang henteu hoyong ngartikeun aranjeunna dua kali.
Janten naon salajengna? Kami parantos panjang. Emang, urang kedah siap nyebarkeun situs ka server. Kami tiasa nambihan hiasan @loginy_require sareng ngajantenkeun pandangan kami teu aman, nyandak email, sareng inpormasi cache, anu cache anu kedah dilakukeun pikeun dilaksanakeun penerjeménan. Kami bakal nambihan sababaraha fitur anu langkung mangpaat, teras ngawangun pikeun ngabagi kodeu ka server kami, Nyetélasi Muda, Configurasi domain, sareng film domain.
Urang ogé peryogi pandatan ngareswes kecap akses, ku kituna hayu urang tambahkeun éta gancang. Django anu diwangun dina pandangan ngarencanakeun Kecap aksés rusak dina sababaraha fungsi, tapi urang bakal katingali kumaha nyerat tempo too kami, batling, sareng pola url. Ieu mangrupikeun pandangan sapertos, dina pangguna / pandangan.py
# ... impor
Formulir ieu diwangun di Django, tapi urang bakal peryogi template pikeun mastikeun kecap konci, pangguna / témplat / pangguna / kecap konci / kecap konci / kecap aksés
Urang ogé gaduh template pikeun ngirim email reset sandi, nganggo bentuk sadetik, dina pangguna / témplatas / pangguna / sandi_hesml
Templat pikeun email sorangan, éta file HTML dasar neraskeun tautan pikeun ngareset kecap konci, dina pangguna / kecap barang. Django bakal sacara otomatis napsirkeun file ieu.
Urang ogé bakal peryogi dua témplat langkung. Anu pangheulana nyaéta pikeun mastikeun yén email parantos dikirim. Pagne pikeun ieu parantos di Django, ku kituna urang kedah ngécéskeun aranjeunna dina url.py. Template ieu ayana di pangguna / témloplate / pangguna / sandi_reset_html
Sareng anu terakhir, pikeun mastikeun yén reset kecap konci lengkep, pangguna / témplat / pangguna / sandi / sandi_html
Ayeuna, urang peryogi pola url pikeun pandangan ieu. Dina pangguna / URLS.PY, tambahkeun pola URL di handap ieu:
# ... URL saméméhna di dieu
Opat témplat, éta pisan! Tapi ayeuna urang tiasa yakin tiasa ngareset kecap akses pangguna naon waé anu urang butuhkeun, ti éta browser wéb.
Kuring ngarti ieu seueur kode. Upami sigana sakedik dina sirah anjeun, éta henteu kunanaon. Anjeun bakal ningkatkeun, pamahaman anjeun bakal ningkatkeun, sareng anjeun bakal janten langkung safabent sareng Kodeu Sécés pas. Upami anjeun leres-leres leungit, kuring nyarankeun balik deui ka software ieu engké dina saatos damel dina diri anu diaku pikeun ngulangkeun kode online. Ieu biasana gratis, sareng Bakal Badarkeun anjeun tina sawaréh anjeun kedah suksés nalika anjeun balik deui proyék ieu. Upami anjeun parantos resep anjeun siap neraskeun, dibaca, teras, urang bakal ngalebetkeun kode anjeun ka server dugi ka akur anyar, ogé otomatis nyetél proyék anyar sareng sababaraha paréntah anyar anjeun nganggo paréntah anyar nganggo sababaraha paréntah anyar anjeun nganggo paréntah anyar nganggo sababaraha paréntah anyar anjeun nganggo paréntah anyar nganggo sababaraha paréntah anyar anjeun nganggo paréntah anyar nganggo sababaraha paréntah anyar anjeun nganggo pernyataan anyar.
Hal anu terakhir urang kedah dilakukeun sateuacan nyebarkeun ka server anu jauh nyaéta damel situs kami sakedik langkung aman. Anjeun bakal perhatikeun yén pandangan login ngan ukur nyandak nami pangguna sareng kecap konci, sareng teu aya auténtikasi faktor atanapi kode waktos. Ieu mangrupikeun perenahna, sareng nganggo kode anu sami, urang tiasa ngabantosan alam ngirim pesen téks bahkan tiasa responsif pikeun pesen téks anu dikirim ka server. Pikeun ngamimitian, urang bakal balik deui kana modél pangguna sareng nambihan signer timestamp anu bakal ngubaran login. Kami ogé bakal nambihan idéas anu unik, raketna identik pamaké anu bakal dianggo pikeun nambihan kaamanan tambahan pikeun login kami. Ngédit modél pangguna, pangguna / modél.py, tambahkeun kodeu ieu:
# Pastikeun pikeun ngimpor UUID, SMARTPES sareng Generator URL (sabalikna)
# Tambihkeun kode ieu di dieu
# Sareng tambahkeun fungsi ieu
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Sah kanggo 3 mnt
Pastikeun pangguna / modél Anjeun Sigana kieu, di sagadar-mana waé koméntar (kode dina garis sareng #). Ngarobih handap ieu, sacara sederhana. Kami gaduh sababaraha impor, timesesampsepsant anu utilitas cryprographic éta tiasa ngahasilkeun kode anu aman sareng pariksa pikeun mastikeun éta sah, sareng henteu dianggo sakali, sareng henteu dianggo sakali, sareng henteu dianggo sakali, sareng henteu langkung saé, sareng henteu dianggo sakali, sareng henteu tiasa dianggo sakali, sareng henteu dianggo sakali, sareng henteu dianggo sakali, sareng henteu dianggo sakali, sareng henteu saé saatosna, sareng henteu tiasa dianggo sakali, sareng henteu saé tibatan sajumlah detik. Urang ogé nganggo Uuid, anu iitip unik anu identikna ku pangguna kami dina tanda token, sareng dina URL anu dikirim ka para. Kami bakal nganggo kritik dasar ieu ngawangun dua tempoan ototor. Sateuacan urang ngalakukeun anu sanés, hayu urang ngajalankeun migrasi janten model pangguna urang diropéa. Dina diréktori sareng Alupan, ngajalankeun paréntah di handap ieu pikeun ngajantenkeun sareng ngarengsekeun migrasi.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Ieu penting kusabab unggal waktos kami ngajantenkeun parobahan modél, urang kedah nyieun tabel sareng ngapdet databés sareng ingkar sateuacan kami tiasa nganggo model.
Salajengna, hayu urang nangtoskeun pandangan login kami pikeun alihan kana pandangan oténtikasi sekundér. Di pangguna / pandangan, cabut fungsi login sareng alihan ka URL anu urang atos ngahasilkeun dina modél pangguna.
# ... impor
if user and user.profile.can_login < timezone.now(): # Catet yén urang ayeuna parios upami pangguna tiasa log in
# Hapus fungsi anu otor_login anu aya di dieu
return redirect(user.profile.create_auth_url()) # Catetan Kami alihan kana URL anyar di dieu
else: # Upami pangguna henteu nganggo auténtikasi multi-faktor, hungkul log in.
else: # Upami login henteu suksés,
user = User.objects.filter(username=username).first() # Ieu mangrupikeun bagian dimana kami ngomean profil pangguna
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Janten aranjeunna henteu tiasa log deui pikeun sababaraha detik
Janten ieu anu saé biasa, urang ngagaduhan cara pikeun panempoan tempoan oténtikasi latihantu dua faktor nalika kami nyiptakeun. Urang ogé gaduh ragrag bisi pangguna henteu nampi nomer telepon. Kami bakal nambihan pandangan dasar pikeun nambihan nomer telepon pas sareng log in sareng pesen téks pas.
Mimiti, urang peryogi cara anu gampang pikeun ngirim pesen téks tina kode kami. Jang ngalampahkeun ieu, urang tiasa milih tina sababaraha inggris, tapi anu paling gampang dina pamanggih kuring nyaéta TKildio. Éta ogé nawiskeun harga anu hadé pikeun proyék anu langkung alit, ogé diskon bulag. Damel akun dina Twilio.com, Éim dina sababaraha rinci ngeunaan Proyék anjeun, mésér nomer telepon, sareng nyalin keysika API anjeun ka setélan anjeun pikeun setélan. Teras, tambahkeun ku kode ieu dina file anu anyar, pangguna / SMS.Py.
nano users/sms.py
# Ngimpor sadayana bungkusan anu dipikabutuh
# Kode ieu ngirim téks sareng Twilio
# Fungsi pembantuan pikeun nyandak nomer sareng seueur angka
# Kirim téks pikeun pariksa pangguna
# Kirimkeun pangguna téks sareng fungsi ieu
# Nilai kode sareng fungsi ieu
# Validate waktos
Pastikeun ngarobih setélan anjeun sacara tepat, nambihan garis ieu sareng konci anjeun:
# Pastikeun pikeun nyalin ieu tina dasbor twilio anjeun
AUTH_VALID_MINUTES = 3 # Jumlah menit halaman TFA aktip sakali instaned
Mimiti, urang peryogi bentuk pikeun pandangan kaaslianana urang. Ngédit pangguna / bentuk.py, tambahkeun kode di handap ieu.
# ... impor
# Bentuk pikeun ngetik nomer telepon kami
# Bentuk pikeun otentik
Salajengna, hayu urang nyiptakeun pandangan dina pangguna / pandangan.py
# ... impor
Kami ogé peryogi témplat pikeun kadua pandangan ieu. Hayu urang nambihan template MFA heula.
nano users/templates/users/mfa.html
Tambahkeun kode HTML ieu ka template
Ieu mangrupikeun penjelasan diri. Formulir ngirim boh kode atanapi kode kosong, sareng anjeun bakal perhatikeun dina pandangan anu kami kirimkeun kode upami urang nampi kode kosong. Teras we gaduh dua kirimkeun kirimkeun, sareng cara kieu urang tiasa ngirim kodeu kalayan kéléh ogé. Salajengna, urang bakal nambihan wangun saderhana kanggo nambihan nomer telepon.
nano users/templates/users/mfa_onboarding.html
Tambihkeun HTML ieu:
Wangun ieu seueur anu langkung saderhana, éta ngan ukur ngalahirkeun bentuk nomer telepon kami nyiptakeun sareng ngantep pangguna nambihan nomer telepon.
Ieu katingalina saé! Salami sadayana diatur, urang kedah tiasa ngirim pesen, sareng log pangguna dina nomer telepon anjeun pas nambihkeun pola url. Hal anu pangahirna urang kedah nyetél nyaéta pandangan profil supados urang tiasa mastikeun pangguna tiasa ngarobih nomer telepon anjeun tanpa milih pesen téks anu bakal datang.
Hayu urang nambihan pandangan profil pikeun pangguna / pandangan.py. Pandangan ieu bakal ngomean bio pangguna, email, nami pangguna, sareng nomer telepon, ogé ngamungkinkeun urang ngaktipkeun pelanggaran faktor multi. Mimiti, urang peryogi dua bentuk langkung seueur dina pangguna / form.py
# ... impor
Salajengna, kami tiasa nyiptakeun pandangan anu kanggo ngagunakeun dua bentuk ieu. Édit pangguna / pandangan.py sareng tambahkeun dina pandangan.
# Tambahkeun impor ieu
Urang ogé peryogi template kanggo panempoan ieu.
nano users/templates/users/profile.html
Anjeun bakal perhatikeun ieu mangrupikeun bentuk anu lumayan seni gedé, tapi ngagaduhan sababaraha javaSht di jerona nyopsir bentuk formulir sapertos aranjeunna diropéa. Ieu gunana pikeun, janten anjeun tiasa ngadamel éditan tanpa kedah pencét ngalebetkeun unggal waktos.
Salajengna, urang peryogi url ngalambangkeun sakumna pintonan ieu dina pangguna URL. Édit pangguna / URLS.PY sareng nambihan kode ieu:
# ... kode saméméhna, impor
# ... pola URL urang sateuacana diasupkeun, tambahkeun tilu garis salajengna
Ayeuna mangrupikeun waktos anu saé pikeun nguji proyék kami. Tapi heula, hayu urang ngajalankeun cadangan sanés.
backup
Sareng ngajalankeun server. Sateuacan urang nyebarkeun kana server Linux, éta mangrupikeun ide anu saé pikeun ngaktipkeun dua kaaslianana dina akun. Kami bakal ngalakukeun ieu bade ka URL profil urang, / pangguna / profil / sareng mariksa kotak kanggo ngaktipkeun Auténtikasi saatos ngetik nomer telepon kami, teras ngalebetkeun wangun telepon kami, teras kirimkeun bentukna.
python manage.py runserver localhost:8000
Visit the webpage by going to your web browser, I'm using Google Chrome in this example, and entering the URL https://localhost:8000/accounts/profile/
Anjeun bakal tiasa asup upami diperyogikeun sareng aktipkeun dua kaaslianana faktor.
Proyék ieu peryogi server pikeun dijalankeun supados leres-leres tiasa ngirim surat. Tapi heula, urang peryogi cara ningali kasalahan. Anjeun bakal perhatikeun yén upami anjeun ngajalankeun daptar Server di modeu debut, sareng Setélan.Debug sami, Server nunjukkeun kasalahan otomatis. Pikeun nunjukkeun kasalahan tanpa nganggo modeu debug, anu henteu aman dina server produksi, urang kedah nambihan tempoan kanggo éta. Kasalahan anu paling penting urang kedah tiasa ngadamel:
Kasalahan 500 - masalah sareng kode kami Kasalahan 404 - halaman anu henteu kapendak (URL rusak) Kasalahan 403 - ijin ditolak kasalahan
Hayu urang nambihan aplikasi anyar pikeun nanganan kasalahan ieu, disebut kasalahan.
python manage.py startapp errors
Tambihkeun ieu kana setélan.Py sapertos anu urang sateuacan, dina setting anu dipasang_appps, sareng dimimitian ku cara nambahan rujukan kana sababaraha cita-aplikasi DJATO.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Ieu sadayana anu peryogi kajahatan ti pandangan, témplat sareng sakedik tina medakware. Hayu urang ngartikeun kitu:
# Jieun pandangan anjeun di dieu.
Salajengna, hayu urang ngartikeun tengah tengah pikeun nanganan kasalahan. Kami bakal ngalakukeun ieu ku heula nambihan ka Tengah Gedware_classes dina Setélan.py, sareng nami Tengah.
# ... sauran sauran
Salajengna, hayu urang nambihan 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.')
Kami tambahkeun fungsi pikeun kéngingkeun kecuali écés ku ngagunakeun thicking lokal, anu ngabantosan urang ngalacak kasalahan dina kode kami. Dina hal témplat, urang ngan ukur aya hiji, sabab urang sacara sukari ngartikeun ku tempoan ieu. Citakan ngan kedah lepat judul sareng "renik", kasalahan kasalahan kami tina kontéks.
nano errors/templates/errors/error.html
Ieu mangrupikeun tamil pangbasajanna urang - tapi kumaha gampangna nya ningali kasalahan dina proyék urang. Salajengna, hayu pareum debug dina setélan.
nano app/settings.py
Milarian garis ieu dimana éta diatur pikeun leres, sareng robih ka palsu
DEBUG = False
Teraskeun sareng cadangan aplikasi ayeuna. Kami parantos nyebarkeun ka server Resoxe, sareng tetep nambihan fitur ti dinya.
sudo backup
Sateuacan urang pasang-kode ieu ka Panglut, urang kedah mertimbangkeun masalah anu nganggo kode. Gumantung kana kasus, situs anu nampi inpormasi anu dipasang pikeun aranjeunna bakal ngagaduhan masalah sareng spam anu dipasang sareng kasusah ngahapus spam. Ieu henteu kedah kajantenan langsung, tapi upami éta kajantenan, kami bakal nguji kumaha spés sacara otomatis SPAs SPAs, Scanition s Rothot atanapi scan.
Ningali conto inféntikasi Seresan faktor multi dipedarkeun, produksi, hal tiasa béda. Perhatoskeun kumaha kami ngawatesan login, sareng token. Upami robot ngaksés situs, dua pelanggan atawa faktor tiasa langkung hese sakumaha aranjeunna tiasa ngetik kode dina waktos anu sanés. Pikeun merangan hal ieu, hayu urang nganggo modél pangguna pikeun modél pangguna, déklaring kumaha urang berinteraksi sareng situs étaevikasi. Kami ogé bakal nambihan pilihan pikeun ngabuktoskeun sareng email. Mimitian ku ngédit modél pangguna sareng Nano.
nano users/models.py
Ieu naon modél anu urang tambahkeun ogé. Urang henteu peryogi metodeu, ngan ukur variabel pikeun nyimpen id, pangguna, timestamp, bédana, panjang sareng nyobian auténtikasi faktor atanapi email sapertos 123456 dikirim ka telepon atanapi emailan).
# Token dasar anu dipaké pikeun asup ka situs wéb
Hayu urang ogé nambihan hak istimewa pikeun Pamaké kami, sareng kami bakal nyetél sacara manual pikeun ayeuna, sateuacan taun hijrah kanggo ngokolakeun pangguna statisimasi sacara otomatis. Dina modél pangguna, tambahkeun garis ieu dina profil:
vendor = models.BooleanField(default=False)
Ku nganggo parobihan kana database, urang kedah ngajadikeun migrasi sareng milarian database naon waé anu ngédit modél.Py di Dijango. Émut, kanggo ngalakukeun ieu kami nganggo sumber heula (upami éta henteu acan dianggo parantos ti saprak terminal éta dibuka) sareng Pyton Affrations.
cd project-directory-you-named # (upami diperyogikeun)
Kanggo ayeuna, anjeun tiasa ngagambarkeun ieu MAY anu dilakukeun salaku vender ku ngagunakeun cangkang.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Ayeuna, Hayu urang ngintalkeun panempoan entalan faktor urang pikeun nganggo token ieu. Anu mimiti, urang kedah ngarobih utilitas mFA mfa urang. Nganggo 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
# Ngabuktoskeun kaaslianana nganggo email atanapi nomer teleponna
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Nyaring token ku nilai anu kasorang dina URL (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)) # Upami sési ieu henteu acan diciptakeun, jieunna
user = User.objects.filter(id=token.user.id).first() # Kéngingkeun pangguna tina token
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Upami aranjeunna parantos dikonfirmasi, log in
if not user: raise PermissionDenied() # Deny upami henteu aya pangguna
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Pariksa token panulis
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Asup dina pangguna upami aranjeunna henteu acan dipasang
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Atur béak dina oténtikasi faktor multi
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Alihan pangguna ka halaman salajengna
if not user.profile.mfa_enabled: # Parios upami MFA diaktipkeun
if not check_verification_time(user, token): # Pariksa waktos
user.profile.mfa_enabled = False # Jelas nomer telepon
user.profile.enable_two_factor_authentication = True # Aktipkeun MFA
user.profile.phone_number = '+1' # Pareuman nomer telepon
user.profile.save() # Simpen profil
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log pangguna dina upami MFA henteu diaktipkeun
if request.method == 'POST' and not fraud_detect(request, True): # Upami pamundut mangrupikeun pamundut pos
form = TfaForm(request.POST) # Instane bentuk
code = str(form.data.get('code', None)) # Kéngingkeun kode
if code and code != '' and code != None: # Pastikeun henteu kosong
token_validated = user.profile.check_auth_token(usertoken) # Pariksa token panulis
is_verified = check_verification_code(user, token, code) # Pariksa kode
if token_validated: # Upami sadayana
if is_verified: # Nyaéta dina raraga
user.profile.mfa_enabled = True # Aktipkeun MFA (upami henteu diaktipkeun)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Asup dina pangguna
for key, value in request.GET.items(): # Ngawangun pamindanyaan pikeun parameter salajengna (upami aya)
return HttpResponseRedirect(next) # Al alin?
elif not token_validated: # Upami token henteu leres
if p.mfa_attempts > 3: # Upami aya seueur teuing usaha
if form.data.get('send_email', False): # Kirim email (atanapi téks)
# Render Formulir (kanggo kéngingkeun pamundut)
Nalika kami nambihan dina kode ieu, pastikeun pikeun ngimpor fungsi pikeun ngirim email. Di luhur file, pandangan pangguna (sareng impor sanés), tambihan
from .mfa import send_verification_email as send_mfa_verification_email
Ayeuna, urang kedah nyerat fungsi éta sateuacan bakal dianggo ieu. Éta kedah manjangkeun fungsi email kirim kami, sareng ngan saukur ngirim email ka pangguna nganggo 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))
Janten ieu sadayana tiasa dianggo hébat, ayeuna urang ngagaduhan sistem aflamitas faktor anu gumantung hiji angka atanapi email ka catetan pikeun ngagampangkeun sareng masalah urang. Ieu tiasa spammers, robot atanapi saha waé anu henteu hartosna ogé pikeun padamelan urang. Ningali pandangan anu kuring gaduh pikeun pangguna pikeun pangguna dina situs wéb kuring:
# impor
from .tests import is_superuser_or_vendor # Kami kedah nyiptakeun ujian ieu
# Kéngingkeun daptar pangguna
return render(request, 'users/users.html', { # Balikkeun pangguna dina template
Catet yén kodeu ieu nganggo ujian, urang kedah ngumumkeun tés ieu dina tulisan tés sareng impor. Ngédit pangguna / tés.py, hayu urang nyiptakeun ujian.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Ieu ditéang sareng pangguna / pangguna profil.html, anu siga anu sapertos kieu:
Catet yén template kalebet template anu sanésna, pangguna /pangguna.html. Nalika nganggo template anu ngagaduhan subkalas sareng henteu nganggo manjangan, pamanggih anu saé pikeun nambihan undercore () Sateuacan nami file pikeun manjangkeun, supados ngabédakeun témplat.
Catet yén ieu seueur Jinja, anjeun panginten tiasa gaduh sadaya variabel ieu anu dihartikeun. Tapi ieu naon kode kuring.
<small># {{pangguna.ID}} </ leutik>
Urang ogé peryogi subkallate sanés, Toggle_actml.html. Citakan ieu kedah janten bentuk anu ngamungkinkeun urang pikeun togél naha pangguna aktif.
Kami ogé kedah nambihan pandangan pikeun kagiatan pangguna togle, sareng pola url anu luyu. Sedengkeun urang di jerona, heed nambihan tempoan pikeun mupus pamaké dina hal anu diperyogikeun.
# Impor
success_url = '/' # Alihan dina url suksés
def test_func(self): # Ujian upami pangguna superuser sareng ijin pikeun mupus
Sanaos ieu praktis nalika diperyogikeun, ngahapus email henteu kedah janten kabutuhan, urang ngan ukur rawa visibilsi pamaké anu urang kedah nganjang.
Pola URL kami nambihan sapertos kieu. Kalayan Nano, édit pangguna / URLS.PY sareng nambihan garis ieu:
nano users/urls.py
Galara kedah angkat dina daptar barang-jalan dina pandangan pamaké, sateuacan raham "]" Tapi saatosna "[".
# ...
# ...
Ayeuna, pastikeun pikeun nyokot deui situs supados anjeun tiasa unduh dina server wéb anu kami bakal teruskeun damel. Tina garis paréntah,
sudo backup
Ayeuna situs kami dicadangkeun.
Janten ayeuna kami ngagaduhan sababaraha fitur anu langkung hadé. Tapi kumaha gambar gedé di dieu? Kode ieu masih teu diaksés tina Internét, kami henteu gaduh Server Sageling KA, sareng urang kedah dilambatkeun aperi urang ogé tetep urang ngajalajah pangguna.
Kami bakal kéngingkeun sadayana ieu. Anu paling penting pikeun ayeuna bakal meunang meratu ieu sacara online, anu kami tiasa dilakukeun sareng mung sababaraha garis su dina panglver Ubuntu. Anjeun kedah nyéwa Sérver Upia sanaos, upami anjeun gaduh Server di bumi sareng langganan internal anu ngamungkinkeun anjeun ngabuka palabuhan. Kuring sacara pribadi ngajalankeun situs ngaran kuring dina HP Z440 anu dipasang di susun hase, tapi biasana langkung mirah kanggo anu kedah dileungitkeun dasar memasep (VPS).
Émut yén kode kami ngajalankeun ayeuna pisan beresih, éta kedah diperuskeun sareng ningkat sateuacan kami parantos siap ngawangun produk. Pastikeun A ati-ati naon anu anjeun lakukeun sareng Internét, pastikeun upami meuntakeun situs ieu dianggap kuno, Anjeun gaduh rencana pikeun meungpeuk interaksi anjeun anu teu dihoyongkeun. Ieu sigana moal aya masalah ti mimiti, tapi urang bakal tétéla jinis solusi pikeun merangan ieu, kaasup pangajaran mesin, intelijen acresial sareng visi akur. Nalika janten masalah, tingali salajengna dina téks ieu kanggo solusi.
Dina hal nyéwa VPS, aya seueur tempat anu anjeun tiasaéng. Autan Google Bere palayan VPS, Imion, Kambarba, Amazon Awa, sareng anu langkung panyadia panyanggungna nawiskeun Tanggongkeun Tetep.
Anjeun kedah klikkeun kana bentuk sareng pilih Renca pikeun ngamimitian. Anjeun tiasa miluan sareng rencana dasar kalayan panyadia, tapi pastikeun kam prosénid anjeun muka Port Server Morts Morts pikeun ngirim email ka-10), sababaraha panyadia Computer. Sajauh kuring ngagaduhan pangalaman anu pangsaéna sareng ionos sareng Kamatera, duanana bakal ngantep kuring ngirim email sareng harga anu lumayan murah.
Anjeun bakal nyambungkeun kana pangladén anyar anjeun kalayan protokol disebut ssh atanapi cangkang aman, anu ngamungkinkeun anjeun antarbeungeut kalayan server anu jauhna komputer pribadi anjeun. Nalika anjeun nyetél server, panyadia hosting kamungkinan bakal naroskeun pikeun nambihan konci SSH, atanapi aranjeunna bakal masihan anjeun kaernal sareng kecap aksés. Konci ssh nyaéta kumaha anjeun bakal log in ka server tina garis paréntah pikeun ngedit kode. Anggo pilihan SSH-konci di handap pikeun ngahasilkeun konci SSH.
ssh-keygen
Simpen file sareng nimpa deui upami anjeun kedah, saé pikeun muterkeun kenop ssh anjeun upami anjeun parantos parantos. Ayeuna, anjeun tiasa nganggo paréntah di handap ieu pikeun ningali konci SSM. Anjeun bakal hoyong nyalin éta pikeun server jauh anjeun supados anjeun tiasa nganggo konfikasi.
cat ~/.ssh/id_rsa.pub
Upami anjeun henteu tiasa ningali konci SSH nalika ngetik paréntah anu (senar panjang tina angka sareng hurup anu dimimitian ku "SSH-RSA AAA ARA (sahingga kuring tiasa dianggo.
ssh-keygen -t rsa -b 4096
Jieun VPS ngajalankeun Ubuntu, kumaha ogé anjeun badé ngalakukeun ieu. Saatos Anjeun janten buka ku klik dina bentuk dina situs web panyadia (Kamatista.com, Boneos.com), alamat éta sapertos XX.XX.xx.xx.xx.xx.xx.xx.xx.xx). Anjeun ogé tiasa sénsitip kana nami lariosan standar dina server kami dicadamel, contona, garsu.
ssh ubuntu@XX.XX.XX.XX
Anjeun tiasa naroskeun kanggo sandi, upami anjeun ditaros kana kecap konci, asupkeunana. Kami moal nganggo nami pangguna standar, ku kituna ayeuna urang mimitian ku akun ssh sareng nambihan konci ssh sareng nambihan kaméra ssh pikeun akunna.
Hayu urang mimitian ku nambihan file sshd_config anyar, anu nyarioskeun pangladén kumaha carana nganggo SST.
nano sshd_config
# Ieu mangrupikeun file konfigurasi SSSTER-lebar sistem. Tingali
# Sshd_config (5) Kanggo inpormasi anu langkung lengkep.
# Sshd ieu disusun ku jalur = / USR / lokal / Sbin: / USR / lokal / bin: / UsR
# Strategi anu dianggo kanggo pilihan dina SSHD_Config
# Openssh nyaéta pikeun nunjukkeun pilihan sareng nilai standarna dimana
# jéntré, tapi ngantepkeun aranjeunna mairan. Pilihan anu teu jelas ngaleut
# nilai standar.
# Port 22
# Informefurily naon waé
# Girang 0,0.0.0
# REXADDRESS ::
# Hostey / jsb / ssh / ssh_host_rsa_key
# HostKey / jsb / ssh / ssh_Host_ecda_key
# HostKey / jsb / ssh / ssh.host_ed25119_key
# Ciphers sareng konci
# Reyeylimit standar henteu
# Logged
# Panulis Syslogfacity
# Info loglevel
# Auténtikasi:
# Logingracetime 2m
# Penuntut
# Strikmodes enya
# MaxAuthtries 6
# Maxsesi 10
# Diarepkeun .ssh / otorisasi_key2 kanggo diusahakeun sacara standar.
# Otorisasi otorisasi
# Otorisyckycka henteu
# ObrolyceyeCkycwome
# Pikeun ieu damel anjeun ogé bakal peryogi Host One di / jsb / ssh_known_knowns
# Hostbasedautio henteu
# Ngarobih Sumuhun upami anjeun henteu percanten ~ / .ssh / dikenal_Hosts pikeun
# Hostbasedautation
# Henteu malireernosthost henteu
# Entong maca pangguna ~ / .rhost sareng ~ / .sshost file
# Teu getah enya
# Pikeun mareuman kecap akses téks anu jelas, robih henteu di dieu!
# Perangkat perdagangan henteu
# Ngarobih Sumuhun pikeun ngaktipkeun kecap konci réspon tangtangan (masalah beware sareng
# Sababaraha modul PAM sareng benang)
# Pilihan Kerberos
# Kerberoshautation henteu
# Kerberoslocalwalw
# Kerbercicetchanlanup
# KerbercetgetPstoken henteu
# Pilihan GSSAPI
# Gssapiauthentication no
# Gssapiclandentcred
# Gsapctictict
# GSSAPIOTYEXCHEO
# Atur ieu ka 'YES' pikeun ngaktipkeun auténtikasi PAM, ngolah akun,
# sareng sesi pamrosésan. Upami ieu diaktipkeun, pananggalan PAM bakal
# diidinan ngaliwatan KBDinterachialhreathentice sareng
# Kecap aksésaiuthentication. Gumantung kana konfigurasi PAM anjeun,
# Auténtikasi PAM via KBDinteruthreathreathentice tiasa jalan jalan
# setting "Quighrootlogin tanpa-sandi".
# Upami anjeun ngan hoyong akun PAM sareng sési parios kanggo ngajalankeun tanpa
# Auténtikasi PAM, teras ngaktifkeun ieu tapi nyetél kecap akses
# sareng kbdinteruthreathiveice ka 'henteu'.
# Sumuhun Sumuhun
# Sumuhun Sumuhun
# Gatewortports henteu
# X11DICPOPSTSTIP 10
# X11uselocalhost nuhun
# Permitty enya
# Cetlastlog enya
# TCPEKEALE YES
# Paralénganvironment henteu
# Kondisi ditunda
# Klién 0
# Klién 3
# Biasa henteu
# Pidfile /run/sshd.pid
# Maxstarts 10: 30: 100
# Permitunnel henteu
# Kropdirektor
# Versidendum euweuh
# Henteu aya jalur banner standar
# Ngidinan klien pikeun lulus variabel lingkungan lokal
# override standar teu aya subsystems
# Conto Setélan overriding dina SUMBIR
# Patandingan pangguna anoncvs
# X11forwing henteu
# Entchcforge henteu
# Permitty henteu
# Server CVS Scrsmand
Inget, CTRL + X sareng Y pikeun nyimpen file. Salajengna, hayu urang nyerat naskah dasar anu digarapkeun inisialisasi (sadayana dina diréktori bumi standar tina pangguna kami).
nano initialize
Tambahkeun garis ieu pikeun file, ngagantikeun
# ! / bin / bit
Pikeun leumpang anjeun ngaliwatan file ieu, hayu urang ngamimitian baris ku garis. Garis munggaran nyarioskeun kompiler anu mangrupikeun naskah Bash. Teras urang pasang réfences, nyalin ssw_config ka diréktori anu leres, balikan deui SSH, anjeun tiasa ngawaskeun nami na sareng tulisan anu nembé). Kami ogé nambihan tim kana kelompok sudo, ngahasilkeun konci shh maranéhna, nambihan key kami pikeun tombol anu otoritas sareng ogé ogé, sareng nyetak konci na. Pangguna anyar ieu bakal aya nalika kami log kana situs.
Dina terminal énggal, payun teras buka server deui.
ssh team@XX.XX.XX.XX
Anjeun henteu kedah ngagaduhan kecap konci ieu, janten anjeun ngagaduhan konci SSH. Kami ogé ngagaduhan login sareng kecap akses pikeun ngajaga situs langkung aman.
Ayeuna, server ieu mimitian kosong sareng henteu aya inpormasi ngeunaan éta. Hayu urang ngamimitian ku nempelkeun proyek kami tina git supados urang tiasa ngundeur sareng ngajalankeun kana mesin jauh. Dina server jauh anu disambungkeun dina SSH, nyiptakeun heula konci SSH anjeun:
cat ~/.ssh/id_rsa.pub
Salajengna, témpél konci ieu kana setélan git sapertos urang sateuacan nyetél gudang git kami. Urang meureun ayeuna clone proyék kami langsung ka server. Pastikeun anjeun ngajantenkeun proyék sacara lokal sahingga éta dina server GIT kanggo undeuran.
git clone git://github.com/you/yourproject.git
Sampurna. Ayeuna sadaya file anu aya di dieu. Urang tiasa ningali aranjeunna sareng ls
ls
Ayeuna, hayu urang ngawitan nyetél pangladén. Mimiti, nyalin diréktori proyek anjeun kana nami anu gampang, urang tiasa dianggo pikeun proyék.
cp -r yourproject whatyoucalledit
Dimana "Manyoulallit" mangrupikeun nami anyar proyék anjeun. Salajengna, urang kedah ngawangun utiliti dasar pikeun nyetél server. Kami bakal ngahémat utiliti ieu sareng nganggo di hareup. Pikeun ngawangun utilitas ieu, hayu urang nyiptakeun binér pangguna pikeun ngartikeun kumaha urang ngédit naskah. Nganggo bash, édit / USR / bin / ascript
sudo nano /usr/bin/ascript
Pastikeun nganggo Sudo di dinya anjeun gaduh ijin pikeun ngédit file. Dina file, tambahkeun garis ieu:
# ! / bin / bit
echo "# ! / bin / bash ">> / USR / bin / $ 1
Inget naskah ieu nyandak argumen, nami skrip, salaku $ 1. Mimiti mariksa upami file teu aya, atanapi disebutkeun ngagampangkeun éta, nambihan baris anu munggaran pikeun ngumumkeun naskah is sampapna, sareng nambihan nami sks-ansi anu nyuhikeun nami scrub. Upami file parantos aya, kantun robih ijin sareng éditanana. Simpen file, sareng salajengna urang bakal ngarobih éta ijin. Salila urang nganggo skrip ieu, kami moal kedah ngalakukeun éta deui.
sudo chmod a+x /usr/bin/ascript
Sampurna. Ayeuna hayu urang nyiptakeun skrip anu disebat pangaturan. Mimiti, henteu pikeun ngaleungitkeun anjeun, tapi nyandak tampilan naon skrip setélan kuring sapertos. Urang bakal leumpang naon skrip ieu kedah sapertos dina proyék anjeun, anjeun moal peryogi sadayana dina naskah kuring.
# ! / bin / bit
# sudo chmod A + x x Infectup
# ./scripts/usersetup
# ssh-Keygen
# Diréktori proyék
# Paréntah log
# Nano connig
# Git config
# Ngapdet sareng pasang
# Aktifkeun Clambirus Antipirus
# Setél hostname
# Posegar setelan
# Nyadangkeun database
# Pareuman iPhtables
# Pasang bit bit bit
# Modél Postpix
# Ngadamel kokotor
# Setup Virtualv
# Kéngingkeun sareng ngawangun depawi
# Setel aturan firewall
# Pasang Gangguan Pypi
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Pip Pasang Opencv-Python == 4.5.5.64
# Pip Pasang Openv-Kartib-Python == 4.5.5.64
# Pasang sertipikat
# Mecah cerbot
# Reload server surat
# Salin
# sudo cp /etc/letscrycryctt/live
# sudo cp /etc/letsenCryptt/live/femmebabe.com/cert.pem.pem
# Patch venv
# Setel Setélan Pamaké
# Setel Ijin
# Sudo Chown -r: Pamaké / Vari / Run /
# Sudo Cross CompT: Akar / Run / Sudo / Ts -r
# sudo chmod 664 db.sqlite3
# sudo chown www-data: pangguna db.sqlite3
# Tiron Konpig sareng Setel Ijin
# Setélan Setup
# Nyuntik pam config sareng ngahapus konfig
# sudo sed -I '' '' $ d '/etc/pam.d/sshd
# sudo sed -I '' -e '$ d' / jsb / profil
# Salin Tulisan Bin sareng Setel Ijin
# Reload sareng ngaktifkeun jasa
# Aktifkeun modul apach
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prevork
# Pareuman situs standar
# Aktipkeun situs kami
# Reload daemon sareng balikan deui apache, postfix sareng openkim
# Setel Ijin
# Konfigurasi swap
# Mesin Captika
# SPITIS GIT
# Tampilkeun IPv6 sareng Openkim pikeun Konfigurasi Domain
# Setup réngsé
Éta seueur setélan! Panjang, paréntah log ieu ieu, ngonfigurasi Nano sareng git, nyalin file, undeuran sareng mesen sasak, klonantit, klonénan weltfas Sikléndan sareng nyetél pangladén, pasang konfigurasi, dimimitian sareng mastikeun kuarem, alokasi iPin, sareng dicitak alamat APR6 sareng konci Openkr. Cukup basajan, tapi siga seueur kode. Urang moal peryogi seueur pisan sabab urang henteu gaduh suburna, urang henteu nganggo seledri, Celedywee atanapi Daphne, tapi kami bakal masang sababaraha di antarana pikeun ngamimitian. Perhatoskeun yén kodeu ieu ngagaduhan domain dinyatakeun sababaraha kali.
Urang ogé kedah mésér nami domain (anu mangrupikeun biaya taun anu leutik). Abdi nyarankeun tradphat pikeun mésér domain, perenahna mangrupikeun intuitif sareng gampang dianggo. Anjeun tiasa mésér domain sanés sahiji pilihan anjeun, tapi kuring nganggo domain énggal.com dina conto ieu. Sakali anjeun kedah mésér domain, tinggalkeun panel kortarpaciation dns dituang sareng nambihan catetan nunjukkeun domain anjeun ka server ku alamat IP. Éta kedah siga kieu:
@ A xx.xx.xx.xx
Kalayan operator @ sareng host, hartosna sadayana subddains dina domain ieu sareng domain batrék bakal alihan ka server. Aya seueur rékaman pikeun dibewarakeun, tapi urang tiasa ngaléngkah kana ieu sakali kami siap ngirim surat. Émut, butuh sababaraha dinten sateuacan anjeun tiasa suksés ngirim surat ti server. Rekaman DNS kami netepkeun waktos anu bakal nyandak waktos pikeun nyebarkeun.
Nenun éta, ngan ukur ngarékam urang kedah ngamimitian nyaéta rékaman. Janten ayeuna urang tiasa ngeusian scrrectur di handap ieu namina proyék kami sareng ngajalankeun éta.
Hayu urang mimitian ku naskah setelan anu langkung alit pikeun masang naon anu urang butuhkeun pikeun kamajuan dasar. Kami moal nganggo seueur kaayaan atanapi postgresql acan, kami ngan ukur ngamimitian server HTTP dasar sareng hariwang. Émut, kéngingkeun sertipikat heTPs sareng ngajalankeun pangladén aman, kami kedah mésér domain sapanjang sareng nyéwa server. Pikeun ayeuna, Aring "Tim" dina file ieu nganggo nami pangguna anjeun, "Ka luar" kalayan diréktori proyék, sareng nyayogikeun email sareng IC> tag.
Salaku tambahan, sateuacan urang ngajalankeun kodeu ieu, urang kedah ngarobih setélan kana lintami ka lintas kana panyadia panyayung, upami aya ogé. Biasana ieu aya dina tab 'Prosés ti Dayursi Host anjeun, atanapi upami anjeun menatanganan, nya dina bagian' port anu diteruskeun 'router anjeun. Anjeun ogé badé nyetél i IP statis ngalangkungan router anjeun kalayan alamat mesin server, upami anjeun nganggo hosting diri. Anjeun kedah buka palabuhan ieu pikeun maca / nyerat aksés.
22 (SSH) 25 (mail) 587 (mail) 110 (Klién Mail) 80 (http) 443 (https)
# ! / bin / bit
# Paréntah log
# Nano connig
# Git config
# Ngapdet sareng pasang
# Aktifkeun Clambirus Antipirus
# Setél hostname
# Nyadangkeun database
# Pareuman iPhtables
# Setup Virtualv
# Pasang sertipikat
# Mecah cerbot
# Setel Setélan Pamaké
# Setel Ijin
# Sudo Chown -r: Pamaké / Vari / Run /
# Sudo Cross CompT: Akar / Run / Sudo / Ts -r
# Reload sareng ngaktifkeun jasa
# Aktifkeun modul apach
# Reload daemon sareng balikan deui apache, postfix sareng openkim
# Tampilkeun IPv6 sareng Openkim pikeun Konfigurasi Domain
Sateuacan ngajalankeun kode ieu, mastikeun domain anjeun tos mésér disambungkeun ka server. Jang ngalampahkeun ieu, buka terminal dina mesin lokal anjeun, sareng ngajalankeun paréntah ieu sareng domain anjeun:
ping femmebabe.com # Selapkeun domain anjeun di dieu, saatos ping
Upami sadayana sareng server anu ngirim réspon, kami siap ngajalankeun naskah sareng pasang bungkus ogé mimitian, aktipkeun sareng serangan server apache urang.
Ieu sanés sadaya anu diperyogikeun pikeun ngonpigurasikeun posIx, urang bakal katingali aya setélan langkung engké. Pikeun ayeuna, Raja kode Setel ieu sareng kedah peryogi sababaraha menit kanggo masang sareng sertipikasi server anjeun. Sakali deui, pastikeun pikeun ngagentos nami, email sareng nami domain dina naskah dumasar kana nami anu anjeun mésér.
Ayeuna yén pangladén disayogikeun, anjeun tiasa lebet ka url dina panyungsi wéb sareng pariksa pikeun mastikeun server nyaéta ngajalankeun server kasebut. Upami éta henteu, coba ngantosan sakedik nalika rékaman DNS kanggo nyekel teras ngajalankeun paréntah di handap ieu pikeun sertifikasi interfot:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Salami anjeun parantos ngonpigigired sadayana leres, anjeun kedah tiasa ngakses kaca standar internét saluareun kode anjeun nyaéta gawé sareng nembongkeun tuteb sababaraha wéb. Salajengna, hayu urang éditan setélan.Py pikeun ngarobah mode debug kami pikeun produksi. Urang bakal dikonfigurasikeun domain dina setélan, ogé IPS internal.
nano yourproject/settings.py
Dina setélan, parobahan / nambihan gital ieu.
# Situs config
Ayeuna, urang kedah ngonpigurs Apache2. Hayu urang ngedit file config kami bakal nyebarkeun sareng garis ieu:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Berkas Konpig ieu kedah ngagaduhan nami domain kami, sareng nami pamaké sareng proyék. Abdi nganggo Nam Pomain Femmebabe.com, tim Ngaran, sareng Nian proyék badtebabe.
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>
Pastikeun pikeun ngagentos nami proyék, diréktori, sareng domain dina conto ieu nalika konviguring server anjeun. Ayeuna, urang kedah nganonaktipkeun situs standar. Ieu tiasa dilakukeun nganggo bash.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Salajengna, kami tiasa ngaktifkeun Laun anu standar sareng relasa salian2, ogé nganggo Bash. Émut ngagentos femmebabe sareng nami file anu anjeun dinyatakeun nalika éditan / jsb / apache2 / situs-sayogi /.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Balik deui ka Domain anjeun dina Navbar. Anjeun kedah ningali situsna anjeun dikonpigurasi dina browser wéb anjeun. Gening! Upami anjeun henteu ningali, anjeun kedah damel parobihan. Sisaréi marios setélan dina proyék anjeun, konfigitas Apache, sareng pastikeun anjeun henteu gaduh kasalahan, sareng ngajalankeun paréntah ieu pikeun mariksa proyék pikeun kasalahan.
cd projectname
source venv/bin/activate
python manage.py check
Upami anjeun gaduh kasalahan dina proyék python anjeun, ngalacak ka mana aranjeunna sareng ngalereskeun aranjeunna. Anjeun teu tiasa ningali sadaya kasalahan anjeun gumantung kana tempat éta, janten upami anjeun ngagaduhan kasalahan anu ngan saukur teu nyarioskeun "Adat. Pikeun ngalaan kasalahan.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Gulung ka Garis 83, dimana kasalahan ngalangkungan ieu diangkat (ngan ukur runtuh ("populat () henteu reentence")), sareng nambihan, {}. Ieu katingalina sapertos kieu:
# Nyegah Telepon Reentrant pikeun ngindari ngajalankeun AppConfig.rege ()
# metode dua kali.
# ngangkat lunimeerror ("populate () henteu reentrie")
Anjeun teras tiasa parios proyék deui sareng ngalaan kasalahan.
python manage.py check
Teras anjeun tiasa ningali kasalahan sareng ngalereskeunana. Nalika anjeun parantos dibereskeun sareng kode kompil anu henteu aya kasalahan, pastikeun ngarobah file deui supados siga kieu:
# Nyegah Telepon Reentrant pikeun ngindari ngajalankeun AppConfig.rege ()
# metode dua kali.
# Tim.Proc_concconfigs = {}
Padaptuka server online, nalika urang ngalakukeun peryyaan ayeuna, urang kedah nganggo paréntah di handap ieu pikeun ngélékkeun server:
sudo systemctl reload apache2
Heboh! Tapi kumaha upami ngirim surat? Pikeun ngamimitian ngirim email, urang bakal mimiti ngapdet konfigurasi domain. Ieu kedah aya dina panel DNS anjeun dina basa kadua, atanapi naon waé pendaptaran domain anjeun milih. Kami ogé kedah masang sareng nambihan konfigurasi, sareng ngajalankeun sababaraha paréntah.
Mimiti, hayu urang kéngingkeun alamat IPR6 server. Urang teras buka DNS anjeun sareng nambihan rékaman.
Kéngingkeun alamat IPV6 Server, nganggo paréntah ieu:
ip -6 addr
Ayeuna, kami tiasa nambihan rékaman ieu di handap kana setélan DNS. Rékaman kuring siga kieu. Nanging, pikeun recah anjeun, anjeun kedah ngarobih alamat IP sareng IP anjeun Ip anjeun (sanes 75,147.182, abdi). Ogé tambihan domain anjeun dina tempat fentmiebabe.com, ogé alamat IPV6 anjeun kapendak ku paréntah saméméhna (anjeun henteu tiasa nganggo Ging, 3E02). Entong hariwang ngeunaan dekain sareng ieu, ku urang netepkeun Impyx, server Kirim, sareng Openkim, sareng citak konci. Kami bakal ngonpigurasikeun ieu terakhir.
@ A N / a 75.147.182.214
@ Mx Ngopuhan 10 femmeebabe.com
@ Pt N / a femmeebabe.com
@ TXT N / a TXT @ v = SPF1 MX IP75.147.182.214ip6: FE80 :: 725a: FF49: 3E02 ~ sadayana: Sadaya
standar._bimi TXT N / a v = bimi1; l = https: //femmebabe.com/media/static/statmebabe.svg
_dmarc TXT N / a v = DMARC1; p = euweuh
kirimkeun._didointkey
TXT
N / a
Ayeuna, urang kedah nambihan sababaraha konfigurasi tetep pikeun postfix. Sadaya anu kedah dilakukeun nyaéta mastikeun yén urang ngagentos nami domain, fatmebabe.com, kalayan nami domain anu anjeun anggo. Hayu urang ningali sadaya iplig file hiji-an salah sahiji, sareng pasang aranjeunna di diréktori anu disebut concig dina proyék urang, pikeun ditingali ka OS.
nano config/etc_postfix_main.cf
Tambihkeun téks ieu kana file
# Tingali /USR/share/shostfix/main.cf.dist pikeun mairan, langkung lengkep
# Debian khusus: netepkeun nami file bakal nyababkeun heula
# garis éta file anu kedah dianggo salaku nami. Debian standar
# nyaéta / jsb / mail.
# myorigin = / jsb / mailname
# Apppending .domain mangrupikeun padamelan MUA.
# NoBanment Garis salajengna pikeun ngahasilkeun "Surat Surat" Peringatan
# Tunda_warning_time = 4h
# Tingali http://www.postfix.gR/ruchatsy.Readme.html - standar pikeun 3.6
# dipasang seger.
# Parameter Tls
# Konfigurasi mill
Salajengna config!
nano config/etc_postfix_master.cf
Tambihkeun garis ieu:
#
# File konfigurasi postfix Kanggo detil dina format
# tina file, tingali master (5) halaman manual (paréntah: "Man 5 Master" atanapi
# On-Line: http://www.postfix.org/master.5.html).
#
# Tong hilap ngaéksekusi "postfix Reload" saatos ngédit file ieu.
#
# ==========================================================================
# Layanan Jenis Carmp Crowrard Swastrard Worksp
# (enya) (enya) (henteu) (henteu) (100)
# ==========================================================================
# SMTP inet n - y - 1 postcreen
# SMTPD pas - - Y - - SMTPD
# dnsblog Unix - - Y - 0 Dnsblog
# Tlspoxy Unix - - Y - 0 Tlspoxy
# Pilih hiji: Aktipkeun kiriman kanggo klien tanggungan hungkul, atanapi kanggo klien naon waé.
# 127.0.0.1:Subeints Inet N - Y - - SMTPD
# -o syslog_name = postfix / kiriman
# -o Smpd_tls_security_level = encrypt
# -o Smtpd_sasl_Anh_enable = enya
# -o Smpd_tls_auth_only = enya
# -o Smtpd_rejic_unlisted_Reciprient = henteu
# -o smtpd_crement_riresttions = $ mua_lement_Restitions
# -o Smtpd_helo_Restitions = $ mua_helo_Rentiksi
# -o Smtpd_Sender_Rentriks = $ muan_sender_Rentiksi
# -o Smpd_Reciporient_resttions =
# -o smtpd_relay_restictions = ijin_sasl_authentict, nolak
# -o milter_macro_daemon_name = asalna
# Pilih hiji: Aktipkeun SMTPs pikeun Klién Loopback ngan, atanapi kanggo klien.
# 127.0.0.1:Smtps Inet N - Y - - SMTPD
# Smtps Inet N - Y - - SMTPD
# -o syslog_name = postfix / smtps
# -o smtpd_tls_wrappermode = nuhun
# -o Smtpd_sasl_Anh_enable = enya
# -o Smtpd_rejic_unlisted_Reciprient = henteu
# -o smtpd_crement_riresttions = $ mua_lement_Restitions
# -o Smtpd_helo_Restitions = $ mua_helo_Rentiksi
# -o Smtpd_Sender_Rentriks = $ muan_sender_Rentiksi
# -o Smpd_Reciporient_resttions =
# -o smtpd_relay_restictions = ijin_sasl_authentict, nolak
# -o milter_macro_daemon_name = asalna
# 628 inet n - y - - - qmqpd
# QMR Unix n - n 300 1 oqmgr
# -o smtp_helo_meadout = 5 -o smtp_connect_meadout = 5
#
# ====================================================================
# Interfaces ka software non-posIx. Pastikeun pikeun nguji manual
# Kaca Perangkat lunak Non-posx pikeun ngajantenkeun pilihan anu dipikahoyong.
#
# Seueur jasa di handap ieu nganggo pipa postfix (8) pangiriman
# agén. Tingali pipa (8) halaman kanggo inpormasi ngeunaan $ {panarima}
# sareng pilihan amplop pesen anu sanés.
# ====================================================================
#
# surat mintrop. Tingali file posfrop_readme
# Ogé tangtuna di Main.cf: Maildrop_destination_recipations_limit = 1
#
#
# ====================================================================
#
# Komputer suasa anyar tiasa nganggo "LMTP" LMP "Master.CF.
#
# Sebutkeun dina cyrus.conf:
# LMTP cmd = "LMTPD -A" Dengekeun = Lokalhost: LMTP "proto = tcp4
#
# Sebutkeun di Main.CF hiji atanapi langkung di handap ieu:
# Surat Surat_transport = LMTP: Inet: Localhost
# Budisi_transport = LMTP: Inet: Lokal
#
# ====================================================================
#
# Cyrus 2.1.5 (AMOS GOUUX)
# Ogé netepkeun di Main.cf: Cyrus_destination_reciption_limit = 1
#
# cyrus Unix - n n - - - pipa
# bandéra = Drx Penghur = Cyrus Arglv = / Cyrus / Bin / Ngantikeun -E -R $ {Pangirim}-Iing $ {{}
#
# ====================================================================
# Conto heubeul kiriman via cyrus.
#
# heubeul-cyrus unix - n n - - pipa
# Bandéra = R pangguna = Cyrus Argv = / Cyrus / Bin / M nganteurkeun -m.
#
# ====================================================================
#
# Tingali file UUCp_readme pos
#
#
# Metode pangiriman éksternal sanés.
#
Sareng konfigurasi openkim. Openkim ngaidentipikasi server email sareng konci domain supados langkung aman. Tanpa éta, surat teu dituntatanganan sareng panginten moal janten kotak koropak.
nano config/etc_default_opendkim
Tambihkeun garis ieu:
# Catetan: Ieu mangrupikeun file konfigurasi warisan. Éta henteu dianggo ku Openkim
# Layanan sistem. Punten nganggo parameter konfigurasi anu aya dina
# /etc/opendekim.cof tibatan.
#
# Sateuacana, hiji bakal ngédit setélan standar di dieu, teras ngaéksekusi
# /lib/opendgim/opendekim.Svercice.generate pikeun ngahasilkeun file langkung
# /etc/systemd/system/opendekim.svice.D/override.conf sareng
# /etc/tmpfiles.d/opendkim.conf. Sanaos ieu masih mungkin, ayeuna
# disarankeun pikeun nyaluyukeun setélan langsung di /etc/opendkim.c.
#
# Daemon_opts = ""
# Ngarobih kana / var / spool / postfix / lalumpatan / openkim pikeun nganggo stop kontak UNIX sareng
# postfix dina chroot:
# Rundir = / var / spool / postfix / lalumpatan / openkim
#
# Unjang pikeun netepkeun stop kontak alternatip
# Catet yén netepkeun ieu bakal ngaleungitkeun nilai stop kontak di Openk.contronf
# standar:
# Dangukeun sadaya interfaces dina port 54321:
# Stoks = inet: 54321
# ngadangukeun gelung dina port 12345:
# Stoks = Inet: 12345 @ Lokalhost
# Dangukeun 192.0.2.1 dina port 12345:
# Stoks = Inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Tambihkeun garis ieu:
# standar_process_limit = 100
# standar_clén_limit = 1000
# Standar vsz (ukuran memori virtual) wates pikeun prosés jasa. Ieu utamina
# dimaksudkeun pikeun nyekel sareng maéhan prosés yén mémori bocor sateuacan tuang
# sagalana.
# standar_vsz_limit = 256m
# Pangguna login sacara internal dianggo ku prosés login. Ieu anu paling dipercaya
# pangguna dina sistem dovercot. Henteu kedah ngagaduhan aksés ka naon waé.
# sacara standar_login_user = dovenull
# Pangguna internal dianggo ku prosés anu teu jelas. Éta kedah dipisahkeun ti
# pangguna login, janten prosés login tiasa ngaganggu prosés anu sanés.
# standar_internal_user = dovecot
# palabuhan = 143
# palabuhan = 993
# SSL = nuhun
# Jumlah sambungan ka gagang sateuacan ngamimitian prosés anyar. Biasana
# Hiji-hijina nilai mangpaat nyaéta 0 (teu terbatas) atanapi 1. 1 langkung aman, tapi 0
# leuwih gancang. <Dok / wiki / loginprocess.txt>
# jasa_count = 1
# Jumlah prosés pikeun tetep ngantosan langkung sambungan.
# Proses_min_AVIAC = 0
# Upami anjeun nyetél jasa_count = 0, anjeun panginten kedah tumuh pepelakan ieu.
# vsz_limit = $ standar_vsz_limit
# palabuhan = 110
# palabuhan = 995
# SSL = nuhun
# Port = 587
# Jieun Girang Inet ngan upami anjeun henteu tiasa nganggo stop kontak Unix di luhur
# inet_listeny lmtp {
# Hindarkeun ngadamel LMTTT katingal kanggo sakabéh internét
# alamat =
# port =
# }
# Kalolobaan mémori angkat ka mmap () dina file. Anjeun kedah ningkatkeun ieu
# Batesan upami anjeun gaduh kotak surat ageung.
# vsz_limit = $ standar_vsz_limit
# Max. Jumlah prosés imap (sambungan)
# Proses_limit = 1024
# Max. Jumlah prosés pop3 (sambungan)
# Proses_limit = 1024
# Max. Jumlah prosés kiriman SMP (sambungan)
# Proses_limit = 1024
# Panulis_socket_Sockethed kana stop kontak pangguna ieu sacara standar. Biasana biasana
# dianggo ku dovecot-lda, henteu duka, kamungkinan prosés imap, jsb anu gaduh
# Idin pinuh kana stop kontak ieu tiasa kéngingkeun daptar sadaya nami pangguna sareng
# kéngingkeun hasil tina pamilik pangguna sadayana.
#
# Modeu standar 0666 ngamungkinkeun saha waé anu nyambung ka stop kontak, tapi
# Pamanggih pangguna bakal suksés ngan ukur upami pangguna mulihkeun widang "UID"
# Cocogkeun prosés anu nelepon uid. Ogé upami uid uid atanapi gid cocog
# stops atanapi gid atanapi teid total suksés. Lain nanaon nyababkeun kagagalan.
#
# Méré ijin lengkep anu nelepon pikeun ngarep sadaya pangguna, nyetél modeu ka
# hal anu sanés ti 0666 sareng dovecot ngamungkinkeun para kernel anu ngalaksanakeun
# Idin (e.g. 0777 ngamungkinkeun sadayana Idigala pinuh).
# Proses pensier berhak dijalankeun salaku akar sacara standar, supados tiasa ngakses
# / jsb / kalangkang. Upami ieu henteu kedah, pangguna kedah dirobih
# $ UND_INTAL_USER.
# pangguna = akar
# Lamun didaktor proxy dianggo, prosés mail kedah gaduh aksés kana sandaan na.
# Salaku conto: Modeu = 0660, Grup = Vmail sareng Mail Global_access_groups = Vmail
# modeu = 0600
# pangguna =
# kelompok =
Sakali deui, pastikeun pikeun ngagantikeun domain dina sadaya file ieu, fatmebabe.com, kalayan domain anu anjeun pilih. Édit file salajengna, config dovlik,
nano config/etc_dovecot_dovecot
Sareng nambihan garis ieu
## File konfigurasi dovecot
# Upami anjeun buru-buru, tingali http://wiki2.dovecot.org/qrickcconfigurasi
# "Paréntah DoveconF -n" paréntah masihan kaluaran anu bersih tina setélan anu dirobih. Ngameunangkeunana
# Gantina salin & file pasting nalika ngeposkeun daptar Dovecot Dovecot.
# '# 'karakter sareng sadayana saatos diolah salaku koméntar. Rohangan tambahan
# sareng tab teu dipaliré. Upami anjeun hoyong nganggo salah sahiji anu sacara eksplisit, nempatkeun
# value inside quotes, eg.: key = "# Char sareng labuh whitespace "
# Kaseueuran (tapi henteu sadayana) setélan tiasa diangkat ku protokol anu béda sareng / atanapi
# sumber / tujuan IPs ku nempatkeun setélan di jero bagian, contona:
# Protocol IMAP {}, lokal 127.0.0.1}, Rasa 10.0.0/8
# Nilai standar dipidangkeun pikeun tiap setélan, éta henteu diperyogikeun
# jalma. Ieu mangrupikeun ieu sanaos: Henteu aya bagian (E.g. Namespace {})
# Ataspét plugin ditambahkeun sacara standar, aranjeunna didaptarkeun ngan ukur conto.
# Jalur ogé ngan ukur conto sareng ingkar anu nyata dumasar kana konfigurasi
# pilihan. Jalur anu didaptarkeun di dieu pikeun ngonpigurasikeun (Prex = / USR
# --syscdirfir = / jsb -
# Aktipkeun protokol anu dipasang
# Daptar koma anu dipisahkeun atanapi host dimana ngadangukeun konéksi.
# "*" Jaringan dina sagala interfaces IPv4, "::" Jamuran dina sadaya interpver.
# Upami anjeun hoyong netepkeun palabuhan non-standar atanapi naon waé anu langkung rumit.
# Édit Compl.d / Master.conf.
# Dengekeun = *, ::
# Diréktori dasar dimana pikeun nyimpen data runtime.
# dasar_dir = / var / ngajalankeun / dovecot /
# Ngaran conto ieu. Dina aplikasi multi-Instan Doveadm sareng paréntah séjén
# bisa ngagunakeun -i <conto_name> pikeun milih conto anu dianggo (alternatif
# ka -C <config_path>). Ngaran conto ogé ditambah kana prosés dovecot
# dina kaluaran PS.
# conto_name = dovecot
# Surat salam pikeun klien.
# Login_geeter = Dovecot siap.
# Rohangan anu dipisahkeun daptar jangka jaringan anu dipercaya. Sambungan ti ieu
# IP anu diidinan pikeun ngaleungitkeun alamat IP sareng palabuhan (pikeun logging sareng
# pikeun cék auténtikasi). Pareuman_plaintexex.Auth ogé teu dipalire
# jaringan ieu. Ilaharna anjeun netepkeun server proxy anjeun di dieu.
# Login_trusted_nnetworks =
# Rohangan anu dipisahkeun daptar cék login login atanapi e.g. tcpwrap)
# Login_Acess_sockets =
# Kalayan proxy_maybe = enya upami tujuan proxy cocog sareng IPS ieu, entong
# Pelanggaran. Ieu henteu dipikabutuh normal, tapi tiasa mangpaat upami tujuanna
# IP nyaéta e.g. IP balancer beban.
# pangarang_poxy_.
# Tampilkeun judul prosés kecap pagawéan (di PS). Ayeuna nunjukkeun nami pangguna sareng
# Alamat IP. Gunana pikeun ningali saha anu leres ngagunakeun prosés imap
# (contona. kotak surat anu dibagi atanapi upami upami anu sami dianggo pikeun sababaraha rekening).
# Verboint_poctitle = henteu
# Kudu sadaya prosés dibunuh nalika Proses Master Dovecot Pareuman.
# Netepkeun ieu "henteu" hartosna dovecot tiasa ditingkatkeun tanpa
# maksa sambungan klien anu aya pikeun nutup (sanaos ogé tiasa
# masalah upami paningkatan nyaéta e.g. Kusabab kaamanan ngalereskeun).
# shutdown_llies = nuhun
# Upami non-enol, ngajalankeun paréntah surat via seueur hubungan ieu pikeun server anu henteu
# tinimbang ngajalankeun aranjeunna langsung dina prosés anu sami.
# Dovreadm_worker_count = 0
# Setén atanapi host / host: palabuhan anu dianggo pikeun ngahubungkeun kana server Dovicem
# Doveadm_socket_path = Doveadm-server
# Rohangan anu dipisah tina variabel lingkungan anu dilestarikan dina dovecot
# Startup sareng dialihkeun ka sadaya prosés anakna. Anjeun ogé tiasa masihan
# Konci = Nilai Nilai sok nyetél setélan khusus.
# impr_environment = tz
##
## Setélan Pangladén Pangleutik
##
# Kamus tiasa dianggo pikeun nyimpen konci = daptar nilai. Ieu dianggo ku sababaraha
# plugins. Kamus tiasa diaksés boh langsung atanapi sanaos a
# Pangladar dina server. Nami di handap dikintunkeun nami kupu
# Nalika server dianggo. Ieu teras tiasa dirujuk nganggo uris dina format
# "Proxy :: <Nami>".
# kuota = MySQL: /etc/dovecot/dovecot-sqicl.conf.ext
# Kaseueuran konfigurasi saleresna kalebet di handap. Filenames mangrupikeun
# Mimiti diurutkeun ku nilai ASCII sareng paréntah dina urutan éta. 00-prefix
# dina filenames dimaksudkeun pikeun ngagampangkeun ngartos tatanan.
# Berkas config ogé tiasa dicobian kalebet tanpa masihan kasalahan upami
# Henteu kapendak:
# Ngidinan dovecot ngadangukeun sadaya konéksi input (ipv4 / iPv6)
Tambahkeun kecap akses kanggo pangguna dovecot:
nano config/etc_dovecot_passwd
Bagian kahiji file, sateuacan titik, nyaéta nami pamaké. Bagian anu terakhir, "Hindassword", nunjukkeun kecap konci anu anjeun hoyong masihan server surat anjeun.
team:{plain}yourpassword
Salajengna, Konpigir OpenKim
nano config/etc_opendkim.conf
Sareng nambihan garis ieu:
# Ieu mangrupikeun konfigurasi dasar pikeun ngadaptarkeun sareng verifikasi. Éta gampang
# diadaptasi pikeun cocog sareng instalasi dasar. Tingali openkim.conf (5) sareng
# /USR/share/doc/xendkim/exlingles/opendr.Conf.samle
# dokuméntasi paramét konfigurasi anu sayogi.
# Logwhy henteu
# Parameter anu umum sareng verifikasi. Dina debian, "tina" lulugu
# oversigned, sabab éta sering konci idéntitas anu dianggo ku sistem reputasi
# sahingga sahingga sénsitip kana kaayaan.
# Daptar domain, peminat, sareng konci (diperyogikeun). Contona, ngalakukeun tanda
# Kanggo domain "conto.com" sareng pamilih "2020" (2020._omaDAino.com),
# Nganggo konci swasta anu disimpen dina /etc/dgimkeys/exesle.privrat. Langkung granular
# Pilihan pangaturan tiasa dipendakan dina /USR/sharh/drep/opendekim/readme.opendekim.
# Domain Komunta.com
# Pamilih 2020
# Keyfile /etc/dimsysy/exampe.prnes
# Dina Debian, Openkim ngalir salaku pangguna "Openkim". Umas tina 007 diperyogikeun nalika
# ngagunakeun stop kontak lokal sareng MTAS anu ngaksés stop kontak salaku anu henteu ngagaduhan hak istimewa
# pangguna (contona, postfix). Anjeun kedah nambihan pangguna "postfix" ka grup
# "Openkim" dina kasus éta.
# Sidion pikeun sambungan MTA (diperyogikeun). Upami MTA aya di jero panjara choot,
# Éta kedah mastikeun yén konak anu tiasa diaksés. Di debian, postfix ngajalankeun
# hiji Chroot dina / var / spool / postfix, janten stop kontak UNIX bakal
# dikonpigurasi sapertos dipidangkeun dina garis anu terakhir di handap.
# Stoks lokal: /Run/opendekim/opendek.sock
# Stop kontak: 8891 @ Lokalhost
# Stoke inet: 8891
# Host anu pikeun ngadaptarkeun tinimbang pariksa, standar nyaéta 127.0.0.1. Tingali
# Bagéan operasi Openkim (8) kanggo inpormasi anu langkung lengkep.
# Internhe 192.168.0.0/16, 10.0.0.0/8, 172.16.0/12
# Budaya amanah ngamungkinkeun DNSSec. Dina debian, file jangkar amanah disayogikeun
# ku bungkusan dns-amprika.
# Ngaranervers 127.0.0.1
# Domain Domain ti alamat ka tombol anu dianggo pikeun ngadaptarkeun pesen
# Sakumpulan host internal anu mail anu kedah ditandatanganan
nano config/etc_default_opendkim
Sareng nambihan garis ieu
# Catetan: Ieu mangrupikeun file konfigurasi warisan. Éta henteu dianggo ku Openkim
# Layanan sistem. Punten nganggo parameter konfigurasi anu aya dina
# /etc/opendekim.cof tibatan.
#
# Sateuacana, hiji bakal ngédit setélan standar di dieu, teras ngaéksekusi
# /lib/opendgim/opendekim.Svercice.generate pikeun ngahasilkeun file langkung
# /etc/systemd/system/opendekim.svice.D/override.conf sareng
# /etc/tmpfiles.d/opendkim.conf. Sanaos ieu masih mungkin, ayeuna
# disarankeun pikeun nyaluyukeun setélan langsung di /etc/opendkim.c.
#
# Daemon_opts = ""
# Ngarobih kana / var / spool / postfix / lalumpatan / openkim pikeun nganggo stop kontak UNIX sareng
# postfix dina chroot:
# Rundir = / var / spool / postfix / lalumpatan / openkim
#
# Unjang pikeun netepkeun stop kontak alternatip
# Catet yén netepkeun ieu bakal ngaleungitkeun nilai stop kontak di Openk.contronf
# standar:
# Dangukeun sadaya interfaces dina port 54321:
# Stoks = inet: 54321
# ngadangukeun gelung dina port 12345:
# Stoks = Inet: 12345 @ Lokalhost
# Dangukeun 192.0.2.1 dina port 12345:
# Stoks = Inet: 12345@192.0.2.1
Nalika kami siap nyetél server posfIx, kami bakal ngajalankeun kode di handap ieu, sareng nami domain anu nyalira dipasang. Mimitian ku nyiptakeun skrip
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Ayeuna, di Nano, A Enditor Seksyarina, edit ieu file anu sanés nampi nami domain anjeun tinimbang femmebabe.com.
# ! / bin / bit
# Modél Postpix
Ayeuna, ngajalankeun naskah anu réngsé pikeun ngonpigurasi posIx, OpenKim sareng Dovececot.
./scripts/postfixsetup
Sakali naskah ieu parantos ngajalankeun, nyalin garis anu terakhir éta nyetak sareng témpél kana konfigurasi DNS anjeun salaku nilai pikeun nilik. Ieu mangrupikeun konci openkim anu dianggo pikeun ngaidentipikasi domain anjeun nalika ngirim serat aman.
Heboh! Dina sababaraha dinten, anjeun kedah tiasa ngirim surat tina server anu disayogikeun sadayana dikonfigurasi leres.
Upami anjeun ngan ukur dikonfigurasi DNS kanggo server surat anjeun, kedah peryogi kirang ti 72 jam kanggo rékamanna. Éta biasana langkung gancang. Anjeun tiasa pariksa upami server anjeun damel ku ngagunakeun paréntah ieu, dibéré email anjeun:
echo "test" | mail -s "Test Email" youremail@gmail.com
Upami sadayana katingali leres, anjeun kedah tiasa ngirim email sareng server anjeun. Upami éta henteu tiasa dianggo, coba ningali log pikeun ningali naon kasalahanna.
tail –lines 150 /var/log/mail.log
Ieu bakal nawiskeun inpormasi verbim pikeun Surat anu dikirim ku server sareng naha éta jalanna leres. Anjeun kedah tiasa ningali email dina Inbox anjeun ogé, upami henteu aya, Pariksa polder spam anjeun.
Anjeun ogé kedah ngonpigurasi setelan anjeun dina setélan. Sebly janten server email anjeun tiasa ngobrol sareng aplikasi Django anjeun, proyekna. Tambahkeun atanapi ngagentos garis ieu dina setélan anjeun
EMAIL_HOST_USER = 'team' # 'Cinta@mamashen.com'
Perhatoskeun yén kami nganggo file config pikeun kéngingkeun sandi. Hayu urang muka file ieu dina setélan sapertos kitu, dina awal file .:
# Kabuka sareng beban config
Hayu urang nyiptakeun file ieu sareng tambahkeun konci rusiah pikeun éta, ogé kecap konci surat. Pikeun ngahasilkeun konci rusiah, pakét paréntah ieu, kalayan naon anu panjangna anjeun resep di tungtungna:
openssl rand -base64 64
Ayeuna, nyalin téks anu muka anu dibuka sareng édit /etc/config.json
sudo nano /etc/config.json
Nambahkeun garis di handap ieu pikeun file anjeun, sareng konci anu muka janten konci rusiah.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
Format J Ason basajan sareng gampang dipéréskeun, urang tiasa terformat kenop anu sanésna ku kami hoyong nganggo proyék ieu sareng aranjeunna henteu tiasa nyarios ti supir proyék kami henteu tiasa nyerat ka aranjeunna. Ieu disarankeun prakték pikeun kenop APY, anu urang bakal dianggo langkung ti sababaraha didieu.
Anjeun ogé hoyong nyadangkeun proyek anjeun pikeun mastikeun sadayana disimpen sareng anjeun bakal tiasa pulihkeun pagawéan anjeun langkung saé upami anjeun hoyong nyéwa server.
sudo backup
Ayeuna, coba ngirim emailTL's Email Wéb, disayogikeun hiji tina garis paréntah nya damel. Nyaring conto pangguna anjeun dina cangkang, sareng ngirim email HTML kanggo pangguna ngalangkungan Django. Ganti ngaran abdi dina kode, Charlotte, pikeun nami pangguna anjeun.
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()
Upami paréntah munggaran henteu jalan, pastikeun dianggo
source venv/bin/activate
Disayogikeun sadayana diatur sacara leres, anjeun ayeuna bakal kéngingkeun email anu wilujeng sumping dina kotak surat anjeun dikirim ku aplikasi wéb anjeun. Padamelan anu saé! Anjeun parantos panjang.
Abdi hoyong nambihan, upami anjeun kantos berjuang sareng kasalahan naon waé sakedap nalika damel dina proyék sapertos kieu, ulah ragu milarian waleran sareng nyuhunkeun bantosan. Google, antara mesin pencari sanésna, mangrupikeun sumber anu hébat pikeun milarian bantosan program. Kantun milarian kasalahan anu anjeun bade, sareng anjeun bakal tiasa ningali kumaha jalma sanés ngajawab masalah. Ogé, anjeun balik deui ngahubungi kuring, pendidik anjeun (guru anjeun, profesor, tutor), naon waé anu aya dina internét anu sanés pikeun mendakan prosésor. Kuring teu ngartos ieu teu gampang, tapi upami anjeun parantos maca dina ieu ayeuna sareng palsu ngalangkungan kode, anjeun diajar loba pisan ngeunaan ngawangun aplikasi wéb ti jalan goréng. Pat diri anjeun dina tonggong, anjeun damel padamelan anu saé.
Hatur nuhun pikeun nyandak waktos pikeun maca Pitunjuk Pamakéan katilu ieu. Dina édisi hareup, kuring bakal ngarobih gambar anu disandapeunakeun dina awal dokumén sareng urang pangwangunan langkung jero kana dunya software. Tetep ditujukeun kanggo naon anu datang, sareng kuring ngarepkeun ngajarkeun anjeun kumaha ngawangun software luar biasa. Ningali anjeun dina édisi salajengna!
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
.na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
.na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na 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.
na Daisy / Mtazamo | Nunua | Nunua na cryptocurrency
https://glamgirlx.com
https://glamgirlx.com -
Niachie ncha kwenye bitcoin kwa kutumia anwani hii: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE