ગેરવાજબી સાઇન ફોર્મ ક્રિયા. સુધારેલ ક્ષેત્ર માન્યતા

  • અનુવાદ
  • ટ્યુટોરીયલ

આ શ્રેણીનો ત્રીજો લેખ છે જ્યાં હું ફ્લાસ્ક માઇક્રોફ્રેમવર્કનો ઉપયોગ કરીને પાયથોનમાં વેબ એપ્લિકેશન લખવાનો મારો અનુભવ વર્ણવું છું.

આ ટ્યુટોરીયલનો ધ્યેય એકદમ કાર્યાત્મક માઇક્રોબ્લોગ એપ્લિકેશન વિકસાવવાનો છે, જેના માટે હું છું સંપૂર્ણ ગેરહાજરીમૌલિકતા માટે મેં તેને માઇક્રોબ્લોગ કહેવાનું નક્કી કર્યું.

ક્વિક રીકેપ પાછલા ભાગમાં, અમે હોમ પેજ માટે એક સરળ ટેમ્પલેટ વ્યાખ્યાયિત કર્યું છે અને અમારી પાસે હજુ સુધી ન હોય તેવી વસ્તુઓ માટે પ્રોટોટાઇપ તરીકે કાલ્પનિક વસ્તુઓનો ઉપયોગ કર્યો છે. ઉદાહરણ તરીકે, વપરાશકર્તાઓ અથવા રેકોર્ડ્સ.

આ લેખમાં અમે અમારી અરજીમાં રહેલી ખાલી જગ્યાઓમાંથી એકને ભરવા જઈ રહ્યા છીએ. અમે ફોર્મ્સ સાથે કામ કરવાનું જોઈશું.

કોઈપણ વેબ એપ્લિકેશનમાં ફોર્મ એ સૌથી મૂળભૂત બિલ્ડીંગ બ્લોક્સમાંનું એક છે. ફોર્મનો ઉપયોગ વપરાશકર્તાઓને બ્લોગ એન્ટ્રી પોસ્ટ કરવાની અને એપ્લિકેશનમાં લૉગ ઇન કરવાની મંજૂરી આપશે.

આ ભાગને અનુસરવા માટે, તમારી માઇક્રોબ્લોગિંગ એપ્લિકેશન એ જ હોવી જોઈએ જે અમે તેને પાછલા એકના અંતે છોડી દીધી હતી. કૃપા કરીને ખાતરી કરો કે એપ્લિકેશન ઇન્સ્ટોલ કરેલી છે અને કાર્ય કરે છે.

રૂપરેખાંકન ફોર્મની પ્રક્રિયા કરવા માટે, અમે Flask-WTF એક્સ્ટેંશનનો ઉપયોગ કરીશું, જે WTForms માટે રેપર છે અને ફ્લાસ્ક એપ્લિકેશન્સ સાથે સંપૂર્ણ રીતે સંકલિત છે.

ઘણા ફ્લાસ્ક એક્સ્ટેંશનને અમુક રૂપરેખાંકનની જરૂર હોય છે, તેથી અમે અમારા માઇક્રોબ્લોગ રૂટ ફોલ્ડરની અંદર એક રૂપરેખાંકન ફાઇલ બનાવીશું જેથી જો જરૂરી હોય તો તેને સંશોધિત કરવું સરળ છે. અમે જેની સાથે પ્રારંભ કરીશું તે અહીં છે (config.py ફાઇલ):
CSRF_ENABLED = સાચું SECRET_KEY = "તમે-ક્યારેય અનુમાન લગાવશો નહીં"

તે સરળ છે, આ બે સેટિંગ્સ છે જેની અમારા Flask-WTF એક્સ્ટેંશનને જરૂર છે. CSRF_ENABLED ક્રોસ-સાઇટ વિનંતી બનાવટી નિવારણને સક્ષમ કરે છે. મોટાભાગના કિસ્સાઓમાં, તમે આ વિકલ્પને સક્ષમ કરવા માંગો છો, જે તમારી એપ્લિકેશનને વધુ સુરક્ષિત બનાવશે.

SECRET_KEY માત્ર ત્યારે જ જરૂરી છે જ્યારે CSRF સક્ષમ હોય. તેનો ઉપયોગ ક્રિપ્ટોગ્રાફિક ટોકન બનાવવા માટે થાય છે જેનો ઉપયોગ ફોર્મ માન્યતા દરમિયાન થાય છે. જ્યારે તમે તમારી અરજી લખો, ત્યારે ખાતરી કરો કે તમારી ખાનગી કીનું અનુમાન લગાવવું મુશ્કેલ છે.

હવે આપણી પાસે રૂપરેખા છે અને આપણે તેને વાંચવા અને વાપરવા માટે ફ્લાસ્ક એપ્લિકેશન ઓબ્જેક્ટ બનાવ્યા પછી જ કરી શકીએ છીએ (file app/__init__.py):
ફ્લાસ્ક આયાતમાંથી ફ્લાસ્ક એપ્લિકેશન = ફ્લાસ્ક(__name__) એપ્લિકેશન.config.from_object("config") એપ્લિકેશન આયાત દૃશ્યોમાંથી

લૉગિન ફોર્મ ફ્લાસ્ક-ડબલ્યુટીએફમાં, ફોર્મને ફોર્મ ક્લાસના સબક્લાસ ઑબ્જેક્ટ તરીકે રજૂ કરવામાં આવે છે. ફોર્મ્સ સબક્લાસ ક્લાસમાં ચલ તરીકે ફોર્મ ફીલ્ડ્સને સરળ રીતે વ્યાખ્યાયિત કરે છે.

અમે એક લોગિન ફોર્મ બનાવીશું જેનો ઉપયોગ ઓળખ પ્રણાલી સાથે જોડાણમાં કરવામાં આવશે. અમે અમારી એપ્લિકેશનમાં જે લોગિન મિકેનિઝમને સમર્થન આપીશું તે પ્રમાણભૂત વપરાશકર્તાનામ/પાસવર્ડ પ્રકાર નથી - અમે લોગિન તરીકે OpenID નો ઉપયોગ કરીશું. OpenID નો ફાયદો એ છે કે અધિકૃતતા OpenID પ્રદાતા સાથે કરવામાં આવે છે, તેથી અમને પાસવર્ડ્સ તપાસવાની જરૂર નથી, જે અમારા વપરાશકર્તાઓ માટે અમારી સાઇટને વધુ સુરક્ષિત બનાવશે.

OpenID લૉગિન માટે OpenID નામની માત્ર એક લાઇનની જરૂર છે. અમે ફોર્મમાં "મને યાદ રાખો" ચેકબૉક્સ પણ ઉમેરીશું જેથી કરીને વપરાશકર્તા તેમના બ્રાઉઝરમાં એક કૂકી સેટ કરી શકે જે તેઓ પરત ફરે ત્યારે તેમનું લૉગિન યાદ રાખશે.

ચાલો અમારું પહેલું ફોર્મ લખીએ (file app/forms.py):
flask.ext.wtf થી આયાત ફોર્મ wtforms માંથી TextField આયાત કરો, wtforms.validators માંથી BooleanField આયાત કરો જરૂરી વર્ગ લોગિનફોર્મ(ફોર્મ): openid = TextField("openid", validators = ) memory_me = BooleanField("f_rember) = "rember"

મને ખાતરી છે કે વર્ગ પોતે જ બોલે છે. અમે ફોર્મ ક્લાસ અને બે ફીલ્ડ ક્લાસ આયાત કર્યા છે, જેની અમને જરૂર પડશે, ટેક્સ્ટફિલ્ડ અને બુલિયનફિલ્ડ.

આયાત કરેલ આવશ્યક એ એક માન્યકર્તા છે, એક કાર્ય કે જે વપરાશકર્તા દ્વારા સબમિટ કરવામાં આવેલ ડેટાની માન્યતા કરવા માટે ફીલ્ડ સાથે જોડી શકાય છે. જરૂરી વેલિડેટર ફક્ત તપાસે છે કે ફીલ્ડ ખાલી મોકલવામાં આવ્યું નથી. ફ્લાસ્ક-ડબલ્યુટીએફમાં ઘણા વેલિડેટર છે, અમે ભવિષ્યમાં ઘણા નવા ઉપયોગ કરીશું.

ફોર્મ ટેમ્પ્લેટ્સ અમને એક HTML ટેમ્પલેટની પણ જરૂર છે જેમાં ફોર્મ શામેલ હોય. સારા સમાચાર એ છે કે અમે હમણાં જ બનાવેલ LoginForm ક્લાસ HTML માં ફોર્મ ફીલ્ડ્સ કેવી રીતે રેન્ડર કરવું તે જાણે છે, તેથી આપણે ફક્ત લેઆઉટ પર ધ્યાન કેન્દ્રિત કરવાની જરૂર છે. અહીં અમારું લૉગિન નમૂનો છે: (file app/templates/login.html):
સાઇન ઇન કરો ((form.hidden_tag()))

કૃપા કરીને તમારો OpenID દાખલ કરો:
((form.openid(size=80)))

(%એન્ડબ્લોક%)

નોંધ કરો કે અમે વારસાગત ઓપરેટર દ્વારા base.html ટેમ્પલેટનો ફરી ઉપયોગ કરી રહ્યા છીએ, તેને વિસ્તારી રહ્યા છીએ. અમે અમારા બધા નમૂનાઓ સાથે આ કરીશું, બધા પૃષ્ઠો પર સુસંગત લેઆઉટ સુનિશ્ચિત કરીશું.

ત્યાં અનેક છે રસપ્રદ તફાવતોનિયમિત HTML ફોર્મ અને અમારા નમૂના વચ્ચે. ટેમ્પ્લેટ ફોર્મ ક્લાસના એક ઉદાહરણની અપેક્ષા રાખે છે જે અમે હમણાં જ ફોર્મ ટેમ્પલેટ દલીલમાં સોંપેલ છે. અમે ભવિષ્યમાં આ ટેમ્પલેટ આર્ગ્યુમેન્ટ પસાર કરવાનું ધ્યાન રાખીશું જ્યારે અમે વ્યુ ફંક્શન લખીશું જે આ નમૂનાને પસાર કરે છે.

form.hidden_tag() ટેમ્પલેટ પરિમાણ અમારી સેટિંગ્સ ફાઇલમાં સક્ષમ કરેલ છુપાયેલા CSRF નિવારણ ફીલ્ડ દ્વારા બદલવામાં આવશે. જો CSRF સક્ષમ હોય તો આ ફીલ્ડ તમારા તમામ ફોર્મ પર હોવું જોઈએ.

અમારા ફોર્મ ફીલ્ડ્સ ફોર્મ ઑબ્જેક્ટ દ્વારા પ્રદાન કરવામાં આવે છે, તમારે ફક્ત ટેમ્પલેટના સ્થાન પર દલીલ પસાર કરવાની જરૂર છે (form.field_name) જ્યાં ફીલ્ડ દાખલ કરવું જોઈએ. કેટલાક ક્ષેત્રો દલીલો સ્વીકારી શકે છે. અમારા કિસ્સામાં, અમે ફોર્મને 80 અક્ષરોની પહોળાઈ સાથે અમારું openid ક્ષેત્ર બનાવવા માટે કહી રહ્યા છીએ.

અમે ફોર્મ વર્ગમાં સબમિટ બટનને વ્યાખ્યાયિત કર્યું ન હોવાથી, આપણે તેને નિયમિત ક્ષેત્ર તરીકે વ્યાખ્યાયિત કરવું જોઈએ. સબમિટ ફીલ્ડ કોઈપણ ડેટા ધરાવતું નથી, તેથી ફોર્મ વર્ગમાં તેને વ્યાખ્યાયિત કરવાની કોઈ જરૂર નથી.

ફોર્મ વ્યુઝ આપણે આપણું ફોર્મ જોઈ શકીએ તે પહેલાંનું છેલ્લું પગલું એ વ્યુ ફંક્શન લખવાનું છે જે ટેમ્પલેટ પરત કરે છે.

આ વાસ્તવમાં એકદમ સરળ છે, કારણ કે આપણે માત્ર ફોર્મ ઑબ્જેક્ટને ટેમ્પલેટમાં પાસ કરવાનું છે. અહીં આપણું છે નવી સુવિધાદૃશ્યો (ફાઈલ app/views.py):
ફ્લાસ્ક ઈમ્પોર્ટ રેન્ડર_ટેમ્પલેટ, ફ્લેશ, ફોર્મ્સ ઈમ્પોર્ટ લોગિનફોર્મમાંથી એપ્લિકેશન આયાત એપ્લિકેશનમાંથી રીડાયરેક્ટ કરો # ઇન્ડેક્સ વ્યુ ફંક્શન સંક્ષિપ્ત @app.route("/login", methods = ["GET", "POST"]) def login(): form = LoginForm() render_template("login.html", title = "સાઇન ઇન કરો)", form = form) !}

અમે અમારા LoginForm ક્લાસને આયાત કર્યો, તેને ઇન્સ્ટન્ટિયેટ કર્યો અને તેને ટેમ્પલેટ પર મોકલ્યો. ફોર્મ ફીલ્ડ્સ દોરવા માટે તમારે આટલું જ કરવાની જરૂર છે.

ચાલો આયાત ફ્લેશ અને રીડાયરેક્ટને અવગણીએ. અમે થોડા સમય પછી તેનો ઉપયોગ કરીશું.

અન્ય નવીનતા રૂટ ડેકોરેટરમાં પદ્ધતિની દલીલો છે. અહીં અમે ફ્લાસ્કને કહીએ છીએ કે વ્યુ ફંક્શન GET અને POST વિનંતીઓ સ્વીકારે છે. આ વિના, દૃશ્ય ફક્ત GET વિનંતીઓ સ્વીકારશે. અમે POST વિનંતીઓ પ્રાપ્ત કરવા માંગીએ છીએ જે વપરાશકર્તા દ્વારા દાખલ કરેલ ડેટા સાથે ફોર્મ પરત કરશે.

આ બિંદુએ, તમે એપ્લિકેશન લોંચ કરી શકો છો અને બ્રાઉઝરમાં તમારું ફોર્મ જોઈ શકો છો. એકવાર લોંચ થયા પછી, અમે લૉગિન વ્યૂ ફંક્શન સાથે સંકળાયેલું સરનામું ખોલો: http://localhost:5000/login

અમે હજી સુધી તે ભાગને પ્રોગ્રામ કર્યો નથી જે ડેટા મેળવે છે, તેથી સબમિટ બટનને ક્લિક કરવાથી કોઈ અસર થશે નહીં.

ફોર્મ ડેટા પુનઃપ્રાપ્ત કરી રહ્યાં છીએ
અન્ય ક્ષેત્ર જ્યાં Flask-WTF અમારા કામને સરળ બનાવે છે તે સબમિટ કરેલા ડેટાની પ્રક્રિયા છે. આ નવી આવૃત્તિઅમારું લૉગિન વ્યૂ ફંક્શન, જે ફોર્મ ડેટાને માન્ય અને સાચવે છે (file app/views.py):
@app.route("/login", methods = ["GET", "POST"]) def login(): form = LoginForm() if form.validate_on_submit(): ફ્લેશ("OpenID=" માટે લૉગિન વિનંતી કરેલ છે" + form.openid.data + "", remember_me=" + str(form.remember_me.data)) રીટર્ન રીડાયરેક્ટ("/index") render_template("login.html", title = "સાઇન ઇન કરો)", form = form) !}

validate_on_submit પદ્ધતિ બધી પ્રક્રિયા કરે છે. જો તમે પદ્ધતિને કૉલ કરો છો જ્યારે ફોર્મ વપરાશકર્તાને રજૂ કરવામાં આવે છે (એટલે ​​​​કે, વપરાશકર્તાને ડેટા દાખલ કરવાની તક મળે તે પહેલાં), તે False પરત કરશે, તો તમે જાણો છો કે તમારે ટેમ્પલેટ રેન્ડર કરવું જોઈએ.

જો validate_on_submit ને ફોર્મ સબમિટ રિક્વેસ્ટના ભાગ રૂપે એકસાથે બોલાવવામાં આવે, તો તે તમામ ડેટા એકત્રિત કરશે, ફીલ્ડ્સ સાથે જોડાયેલ કોઈપણ વેલિડેટર ચલાવશે, અને જો બધું બરાબર છે, તો ડેટા માન્ય છે તે દર્શાવતા, True પરત કરો. આનો અર્થ એ છે કે એપ્લિકેશનમાં ડેટા શામેલ કરવા માટે સલામત છે.

જો ઓછામાં ઓછું એક ફીલ્ડ માન્યતા નિષ્ફળ જાય, તો ફંક્શન False પાછું આપશે અને આનાથી ફરીથી ફોર્મ વપરાશકર્તાની સામે રેન્ડર થશે, જેનાથી ભૂલો સુધારવાની તક મળશે. પછીથી આપણે જાણીશું કે જ્યારે માન્યતા નિષ્ફળ જાય ત્યારે ભૂલ સંદેશાઓ કેવી રીતે દર્શાવવા.

જ્યારે validate_on_submit રિટર્ન ટ્રુ આવે છે, ત્યારે અમારું સબમિટ ફંક્શન ફ્લાસ્કમાંથી આયાત કરાયેલા બે નવા ફંક્શનને કૉલ કરે છે. ફ્લેશ ફંક્શન છે ઝડપી રસ્તોવપરાશકર્તાને પ્રસ્તુત કરેલ આગલા પૃષ્ઠ પર સંદેશ પ્રદર્શિત કરી રહ્યાં છે. IN આ કિસ્સામાંજ્યાં સુધી અમારી પાસે લોગીંગ માટે જરૂરી ઈન્ફ્રાસ્ટ્રક્ચર ન હોય ત્યાં સુધી અમે તેનો ઉપયોગ ડીબગીંગ માટે કરીશું, તેના બદલે અમે ફક્ત એક સંદેશ છાપીશું જે મોકલેલ ડેટા બતાવશે. પ્રદાન કરવા માટે ઉત્પાદન સર્વર પર ફ્લેશ પણ અત્યંત ઉપયોગી છે પ્રતિસાદવપરાશકર્તા સાથે.

અમારા પૃષ્ઠ પર ફ્લેશ સંદેશાઓ આપમેળે દેખાશે નહીં; અમારા નમૂનાઓએ અમારી સાઇટના લેઆઉટને અનુરૂપ સંદેશાઓ દર્શાવવા જોઈએ. અમે મૂળ નમૂનામાં સંદેશાઓ ઉમેરીશું જેથી કરીને અમારા બધા નમૂનાઓ આ કાર્યક્ષમતાને વારસામાં મેળવે. આ અપડેટ કરેલ બેઝ ટેમ્પલેટ છે (app/templates/base.html ફાઇલ):
(% જો શીર્ષક %) ((શીર્ષક)) - માઇક્રોબ્લોગ (% અન્ય %) માઇક્રોબ્લોગ (% એન્ડીફ %) માઇક્રોબ્લોગ: હોમ (% સંદેશાઓ સાથે = get_flashed_messages() %) (% જો સંદેશાઓ %)

    (સંદેશાઓમાં સંદેશ માટે % %)
  • ((સંદેશ))
  • (%endfor%)
(% એન્ડીફ %) (% એન્ડવિથ %) (% બ્લોક સામગ્રી %)(% એન્ડબ્લોક %)

હું આશા રાખું છું કે સંદેશાઓ જે રીતે પ્રદર્શિત થાય છે તે સ્વ-સ્પષ્ટીકરણાત્મક છે.

અમે અમારા લૉગિન વ્યૂમાં ઉપયોગમાં લીધેલ અન્ય એક નવી સુવિધા છે રીડાયરેક્ટ. આ ફંક્શન ક્લાયંટના વેબ બ્રાઉઝરને વિનંતી કરેલ પૃષ્ઠ સિવાયના પૃષ્ઠ પર રીડાયરેક્ટ કરે છે. અમારા વ્યુ ફંક્શનમાં અમે માટે રીડાયરેક્ટનો ઉપયોગ કર્યો હોમ પેજ, અગાઉના ભાગોમાં વિકસિત. ધ્યાનમાં રાખો કે ફંક્શન રીડાયરેક્ટ સાથે સમાપ્ત થાય તો પણ ફ્લેશ સંદેશાઓ પ્રદર્શિત થશે.

એપ્લિકેશન ચલાવવા અને ફોર્મ્સ કેવી રીતે કાર્ય કરે છે તે તપાસવાનો આ શ્રેષ્ઠ સમય છે. જરૂરી વેલિડેટર સબમિશન પ્રક્રિયાને કેવી રીતે અટકાવે છે તે જોવા માટે ખાલી ઓપનિડ ફીલ્ડ સાથે ફોર્મ સબમિટ કરવાનો પ્રયાસ કરો.

તેમાં એપ્લિકેશન સાથે ક્ષેત્રની માન્યતા સુધારેલ છે વર્તમાન સ્થિતિખોટા ડેટા સાથે સબમિટ કરેલા ફોર્મ સ્વીકારવામાં આવશે નહીં. તેના બદલે, ફોર્મ વપરાશકર્તાને સુધારણા માટે પરત કરવામાં આવશે. આ આપણને જરૂર છે તે બરાબર છે.

અમે જે ચૂકી ગયા તે વપરાશકર્તાને સૂચિત કરવાનું હતું કે ફોર્મમાં બરાબર શું ખોટું છે. સદભાગ્યે, Flask-WTF આ કાર્યને પણ સરળ બનાવે છે.

જ્યારે ફીલ્ડ માન્યતા નિષ્ફળ જાય છે, ત્યારે Flask-WTF ફોર્મ ઑબ્જેક્ટમાં વિઝ્યુઅલ એરર સંદેશ ઉમેરે છે. આ સંદેશાઓ નમૂનામાં ઉપલબ્ધ છે, તેથી અમારે તેમને પ્રદર્શિત કરવા માટે અમુક તર્ક ઉમેરવાની જરૂર છે.

આ ફીલ્ડ માન્યતા સંદેશાઓ સાથેનો અમારો લૉગિન નમૂનો છે (file app/templates/login.html):
(% વિસ્તરે છે "base.html" %) (% બ્લોક સામગ્રી %) સાઇન ઇન કરો ((form.hidden_tag()))

કૃપા કરીને તમારો OpenID દાખલ કરો:
((form.openid(size=80)))
(form.errors.openid % માં ભૂલ માટે %) [((ભૂલ))] (% endfor %)

((form.remember_me)) મને યાદ રાખો

(%એન્ડબ્લોક%)

અમે ફક્ત એક લૂપ ઉમેરવાનો ફેરફાર કર્યો હતો જે ઓપનિડ ફીલ્ડની જમણી બાજુએ વેલિડેટર દ્વારા ઉમેરવામાં આવેલ કોઈપણ ભૂલ સંદેશાઓને દોરે છે. સામાન્ય રીતે, કોઈપણ ફીલ્ડ કે જેમાં વેલિડેટર જોડાયેલ હોય તેમાં ભૂલો form.errors.field_name તરીકે ઉમેરવામાં આવશે. અમારા કિસ્સામાં આપણે form.errors.openid નો ઉપયોગ કરીએ છીએ. અમે આ સંદેશાઓને વપરાશકર્તાનું ધ્યાન તેમના તરફ દોરવા માટે લાલ રંગમાં પ્રદર્શિત કરીએ છીએ.

OpenID સાથેની ક્રિયાપ્રતિક્રિયા વાસ્તવમાં, અમે એ હકીકતનો સામનો કરીશું કે ઘણા લોકો એ પણ જાણતા નથી કે તેમની પાસે પહેલેથી જ કેટલાક OpenIDs છે. તે જાણીતું નથી કે સંખ્યાબંધ મોટા ઇન્ટરનેટ સેવા પ્રદાતાઓ તેમના વપરાશકર્તાઓ માટે OpenID પ્રમાણીકરણને સમર્થન આપે છે. ઉદાહરણ તરીકે, જો તમારી પાસે Google એકાઉન્ટ છે, તો તેની સાથે તમારી પાસે OpenID પણ છે. જેમ કે Yahoo, AOL, Flickr અને બીજી ઘણી સેવાઓ.

વપરાશકર્તા માટે સામાન્ય રીતે ઉપયોગમાં લેવાતા OpenIDsમાંથી એક સાથે અમારી સાઇટ પર લૉગ ઇન કરવાનું સરળ બનાવવા માટે, અમે તેમાંથી કેટલીક લિંક્સ ઉમેરીશું જેથી વપરાશકર્તાએ OpenID મેન્યુઅલી દાખલ ન કરવી પડે.

ચાલો OpenID પ્રદાતાઓની સૂચિને વ્યાખ્યાયિત કરીને પ્રારંભ કરીએ જેને અમે રજૂ કરવા માંગીએ છીએ. અમે આ અમારી રૂપરેખાંકન ફાઇલમાં કરી શકીએ છીએ (config.py ફાઇલ):
OPENID_PROVIDERS = [ ( "નામ": "Google", "url": "https://www.google.com/accounts/o8/id" ), ( "નામ": "Yahoo", "url": "https //me.yahoo.com" ), ( "નામ": "AOL", "url": "http://openid.aol.com/" ), ( "નામ": "Flickr", "url" : "http://www.flickr.com/", ("નામ": "MyOpenID", "url": "https://www.myopenid.com" )]

હવે ચાલો જોઈએ કે અમે અમારા લોગિન વ્યૂ ફંક્શનમાં આ સૂચિનો કેવી રીતે ઉપયોગ કરીએ છીએ:
@app.route("/login", methods = ["GET", "POST"]) def login(): form = LoginForm() if form.validate_on_submit(): ફ્લેશ("OpenID=" માટે લૉગિન વિનંતી કરેલ છે" + form.openid.data + "", remember_me=" + str(form.remember_me.data)) રીટર્ન રીડાયરેક્ટ("/index") render_template("login.html", title = "સાઇન ઇન કરો)", form = form, providers = app.config["OPENID_PROVIDERS"]) !}

અહીં આપણે app.config માં કીનો ઉપયોગ કરીને તેમને શોધીને સેટિંગ્સ મેળવીએ છીએ. આગળ, રેન્ડર_ટેમ્પલેટ કૉલમાં ટેમ્પલેટ દલીલ તરીકે સૂચિ ઉમેરવામાં આવે છે.

જેમ તમે અનુમાન લગાવ્યું હશે, અમારે આને સમાપ્ત કરવા માટે વધુ એક પગલું ભરવાની જરૂર છે. હવે અમારે અમારા લૉગિન ટેમ્પલેટ (file app/templates/login.html)માં આ પ્રદાતાઓની લિંક્સ કેવી રીતે પ્રદર્શિત કરવી છે તે સ્પષ્ટ કરવાની જરૂર છે:
(% વિસ્તરે છે "base.html" %) (% બ્લોક સામગ્રી %) ફંક્શન set_openid(openid, pr) ( u = openid.search("") જો (u != -1) ( // openid ને વપરાશકર્તાનામ વપરાશકર્તા = પ્રોમ્પ્ટની જરૂર છે ("તમારું " + pr + " વપરાશકર્તા નામ દાખલ કરો:") openid = openid.substr(0, u) + user ) form = document.forms["login"]; form.elements["openid"].value = openid ) સાઇન ઇન કરો ((form.hidden_tag()))

કૃપા કરીને તમારો OpenID દાખલ કરો, અથવા નીચેના પ્રદાતાઓમાંથી એક પસંદ કરો:
((form.openid(size=80))) (form.errors.openid માં ભૂલ માટે %) [((ભૂલ))] (% endfor %)
|(% પ્રદાતાઓમાં pr માટે %) ((pr.name))|

((form.remember_me)) મને યાદ રાખો

(%એન્ડબ્લોક%)

(%endfor%)

આ બધા ફેરફારોને કારણે નમૂનો થોડો લાંબો નીકળ્યો. કેટલાક ઓપનઆઈડીમાં વપરાશકર્તાનામોનો સમાવેશ થાય છે, તેના માટે અમારી પાસે થોડો જાવાસ્ક્રિપ્ટ જાદુ હોવો જોઈએ જે વપરાશકર્તાનામ માટે પૂછે છે અને પછી એક ઓપનઆઈડી બનાવે છે. જ્યારે વપરાશકર્તા પ્રદાતાની OpenID લિંક પર ક્લિક કરે છે અને (વૈકલ્પિક રીતે) વપરાશકર્તા નામ દાખલ કરે છે, ત્યારે તે પ્રદાતા માટે OpenID ટેક્સ્ટ ફીલ્ડમાં દાખલ કરવામાં આવે છે.

Google OpenID લિંક પર ક્લિક કર્યા પછી અમારા લોગિન પેજનો સ્ક્રીનશોટ

અંતિમ શબ્દો જ્યારે અમે અમારા લોગિન ફોર્મ્સ સાથે ઘણી પ્રગતિ કરી છે, અમે વપરાશકર્તાઓને અમારી સિસ્ટમમાં લાવવા માટે ખરેખર ઘણું કર્યું નથી. અમે જે કંઈ કર્યું તે લૉગિન પ્રક્રિયાના GUI સાથે કરવાનું હતું. આ એટલા માટે છે કારણ કે અમે વાસ્તવિક લૉગિન કરી શકીએ તે પહેલાં, અમારી પાસે ડેટાબેઝ હોવો જરૂરી છે જ્યાં અમે અમારા વપરાશકર્તાઓને રેકોર્ડ કરી શકીએ.

આગળના ભાગમાં આપણે અમારો ડેટાબેઝ તૈયાર કરીને ચાલુ કરીશું, થોડી વાર પછી અમે અમારી લોગિન સિસ્ટમ પૂર્ણ કરીશું, તેથી આગળના લેખો માટે ટ્યુન રહો.

ઇન્ટરનેટ પર લગભગ દરેક વેબસાઇટ પર ફોર્મ મળી શકે છે. ઉદાહરણ તરીકે, જ્યારે તમે વેબસાઇટ પર તમારું લોગિન અને પાસવર્ડ દાખલ કરો છો, ત્યારે ડેટા ફોર્મ દ્વારા ભરવામાં આવે છે અને સર્વરને મોકલવામાં આવે છે. વિવિધ સર્વેક્ષણો પણ ફોર્મનું ઉદાહરણ છે.

ટૅગ સિન્ટેક્સ

...

ટેગમાં એક ખૂબ જ મહત્વપૂર્ણ ક્રિયા વિશેષતા છે, જે સ્ક્રિપ્ટનું સરનામું (URL) અસાઇન કરે છે કે જેના પર ફોર્મમાંથી પ્રાપ્ત માહિતી પ્રક્રિયા માટે મોકલવામાં આવે છે. ડેટા મોકલ્યા પછી શું થાય છે તે વિશે અમે વિગતવાર જઈશું નહીં, કારણ કે આ મુદ્દાઓ HTML દ્વારા નહીં, પરંતુ PHP માં GET અને POST પદ્ધતિઓ દ્વારા પહેલેથી જ ઉકેલાઈ ગયા છે.

ઉદાહરણ 1. HTML ફોર્મબટનો સાથે આ બટનો હશે:
બટન એક
બટન બે
બટન ત્રણ






ઓકે ક્લિક કર્યા પછી, પૃષ્ઠ ફક્ત તાજું થઈ જશે, કારણ કે... અમે ક્રિયા પરિમાણનો ઉલ્લેખ કર્યો નથી

પૃષ્ઠ પર નીચેનામાં રૂપાંતરિત થાય છે:

આ બટનો હશે:
બટન એક
બટન બે
બટન ત્રણ
અને આ એક ટેક્સ્ટ ફીલ્ડ હશે. ઉદાહરણ તરીકે, તમે અહીં તમારું લૉગિન દાખલ કરી શકો છો

અને આ એક વિશાળ ટેક્સ્ટ ફીલ્ડ હશે. ઉદાહરણ તરીકે, તમે તમારા વિશેની માહિતી અહીં દાખલ કરી શકો છો

ઉપરના બધા પછી એક ઓકે બટન હશે

ઓકે ક્લિક કર્યા પછી, પૃષ્ઠ ફક્ત તાજું થઈ જશે, કારણ કે... અમે ક્રિયા પરિમાણનો ઉલ્લેખ કર્યો નથી

ઉદાહરણ તરીકે સ્પષ્ટતા

  • action="" - સૂચવે છે કે ડેટા પ્રોસેસિંગ એ જ પૃષ્ઠ પર થશે.
  • - type="radio" લક્ષણ સૂચવે છે કે તમારે આ કોડ પછીના ટેક્સ્ટને પસંદગી બટન તરીકે દર્શાવવાની જરૂર છે. આ ટેગમાં નામ અને મૂલ્ય વિશેષતા હવે અમારા માટે નાની ભૂમિકા ભજવે છે, કારણ કે અમે હમણાં php નો અભ્યાસ કરી રહ્યા નથી (php પાઠ જુઓ).
  • - type="text" લક્ષણ સૂચવે છે કે આ એક ટેક્સ્ટ ફીલ્ડ હશે. અહીં બે મહત્વપૂર્ણ વિશેષતાઓ પણ છે: નામ (php માટે) અને મૂલ્ય (મૂળભૂત મૂલ્ય).
  • - type="textarea" લક્ષણ સૂચવે છે કે આ એક વિશાળ ટેક્સ્ટ ફીલ્ડ હશે. પાછલા કેસથી માત્ર એટલો જ તફાવત છે કે તે તમને મોટા પ્રમાણમાં ટેક્સ્ટ રેકોર્ડ કરવાની મંજૂરી આપે છે.
  • - type="submit" લક્ષણ સૂચવે છે કે આ એક બટન છે. વેલ્યુ એટ્રિબ્યુટમાં બટન પર શું લખવામાં આવશે તે શામેલ છે.

તમે પાઠ 15 માં આ બધા ઘટકો વિશે વધુ વાંચી શકો છો: ટેગ ઘટકો, જ્યાં રેડિયો બટનો, સૂચિઓ, ચેકબોક્સ, ટેક્સ્ટ ફીલ્ડ્સ અને બટનોની ચર્ચા કરવામાં આવી છે.

હવે ટેગના તમામ લક્ષણોને વિગતવાર જોઈએ.

ટૅગ લક્ષણો અને ગુણધર્મો

1. accept-charset="Encoding" લક્ષણ - એન્કોડિંગ નક્કી કરે છે જેમાં સર્વર ફોર્મ ડેટાને સ્વીકારી અને પ્રક્રિયા કરી શકે છે. લઈ શકે છે વિવિધ અર્થો, ઉદાહરણ તરીકે, CP1251, UTF-8, વગેરે.

2. એક્શન="URL" એટ્રિબ્યુટ એ સ્ક્રિપ્ટનું સરનામું છે જે ફોર્મમાંથી પ્રસારિત ડેટા પર પ્રક્રિયા કરે છે. જો તમે આ મૂલ્ય ખાલી છોડો છો, તો ડેટાની પ્રક્રિયા તે જ દસ્તાવેજમાં કરવામાં આવશે જ્યાં ફોર્મ સ્થિત છે.

3. લક્ષણ autocomplete="on/off" - ફોર્મની સ્વતઃપૂર્ણતાને સેટ અથવા અક્ષમ કરે છે. બે મૂલ્યો લઈ શકે છે:

  • ચાલુ - ઓટોફિલ સક્ષમ કરો;
  • બંધ - ઓટોફિલ અક્ષમ કરો;

4. એટ્રિબ્યુટ enctype="parameter" - ડેટા એન્કોડિંગ પદ્ધતિનો ઉલ્લેખ કરે છે. નીચેના મૂલ્યો લઈ શકે છે:

  • application/x-www-form-urlencoded - ખાલી જગ્યાઓ + સાથે બદલવામાં આવે છે, રશિયન અક્ષરો જેવા અક્ષરો તેમના હેક્સાડેસિમલ મૂલ્યો સાથે એન્કોડ કરવામાં આવે છે
  • મલ્ટિપાર્ટ/ફોર્મ-ડેટા - ડેટા એન્કોડેડ નથી
  • ટેક્સ્ટ/સાદો - ખાલી જગ્યાઓ + ચિહ્ન સાથે બદલવામાં આવે છે, અક્ષરો અને અન્ય અક્ષરો એન્કોડ કરેલા નથી.

5. વિશેષતા પદ્ધતિ="POST/GET" - મોકલવાની પદ્ધતિનો ઉલ્લેખ કરે છે. બે મૂલ્યો લઈ શકે છે:

  • GET - સરનામાં બારમાં ડેટા ટ્રાન્સમિશન (મોકલવામાં આવેલા ડેટાના વોલ્યુમ પર મર્યાદા છે)
  • પોસ્ટ - બ્રાઉઝર વિનંતીમાં સર્વરને ડેટા મોકલે છે (મોકલી શકે છે મોટી સંખ્યામાંડેટા, કારણ કે વોલ્યુમની કોઈ મર્યાદા નથી)

6. વિશેષતા name="name" - ફોર્મનું નામ સેટ કરે છે. જ્યારે બહુવિધ સ્વરૂપો હોય ત્યારે મોટાભાગે ઉપયોગમાં લેવાય છે જેથી કરીને તમે સ્ક્રિપ્ટ દ્વારા ચોક્કસ ફોર્મને ઍક્સેસ કરી શકો.

7. નોવેલિડેટ એટ્રિબ્યુટ - ઇનપુટની શુદ્ધતા માટે ફોર્મ ડેટાના બિલ્ટ-ઇન ચેકને રદ કરે છે.

8. target="parameter" વિશેષતા એ વિન્ડો અથવા ફ્રેમનું નામ છે જ્યાં હેન્ડલર પરત પરિણામ લોડ કરશે. નીચેના મૂલ્યો લઈ શકે છે:

  • _blank - પૃષ્ઠને નવી બ્રાઉઝર વિંડોમાં લોડ કરે છે
  • _self - માં પૃષ્ઠ લોડ કરે છે વર્તમાન વિન્ડો
  • _parent - પેરન્ટ ફ્રેમમાં પેજ લોડ કરે છે
  • _top - બધી ફ્રેમ્સ રદ કરે છે અને સંપૂર્ણ બ્રાઉઝર વિંડોમાં પૃષ્ઠ લોડ કરે છે

પ્રિય વાચક, હવે તમે html ફોર્મ ટેગ વિશે ઘણું શીખ્યા છો. હવે હું તમને આગળના પાઠ પર જવાની સલાહ આપું છું.

હેન્ડલરનો ઉલ્લેખ કરે છે કે જ્યારે ફોર્મ ડેટા સર્વર પર સબમિટ કરવામાં આવે ત્યારે તેને ઍક્સેસ કરવામાં આવે છે. હેન્ડલર સર્વર પ્રોગ્રામ અથવા HTML દસ્તાવેજ હોઈ શકે છે જેમાં સર્વર સ્ક્રિપ્ટ્સ શામેલ હોય છે (ઉદાહરણ તરીકે, પાર્સર). હેન્ડલર ફોર્મ ડેટા પર ક્રિયાઓ કરે તે પછી, તે એક નવો HTML દસ્તાવેજ પરત કરે છે.

જો ક્રિયા વિશેષતા ખૂટે છે, તો વર્તમાન પૃષ્ઠ ફરીથી લોડ થાય છે, તમામ ફોર્મ ઘટકોને તેમના ડિફોલ્ટ મૂલ્યોમાં પરત કરે છે.

વાક્યરચના

...

મૂલ્યો

મૂલ્ય એ સર્વર ફાઇલનો સંપૂર્ણ અથવા સંબંધિત પાથ છે.

ડિફૉલ્ટ મૂલ્ય ઉદાહરણ

ફોર્મ, ક્રિયા વિશેષતા

તમે હેન્ડલર તરીકે સરનામું સ્પષ્ટ કરી શકો છો ઇમેઇલથી શરૂ થાય છે કીવર્ડ mailto:. જ્યારે તમે ફોર્મ સબમિટ કરશો, ત્યારે તમારો ડિફોલ્ટ ઈમેલ પ્રોગ્રામ લોન્ચ થશે. સુરક્ષા કારણોસર, બ્રાઉઝરને મેઇલ દ્વારા ફોર્મમાં દાખલ કરેલી માહિતીને શાંતિથી મોકલવાનું અશક્ય બનાવવા માટે સેટ કરવામાં આવ્યું છે. ડેટાનું યોગ્ય રીતે અર્થઘટન કરવા માટે, એલિમેન્ટમાં enctype="text/plain" વિશેષતાનો ઉપયોગ કરો.

ફોર્મ, ક્રિયા વિશેષતા

બ્રાઉઝર્સ

બ્રાઉઝર કોષ્ટકમાં નીચેના સંકેતોનો ઉપયોગ થાય છે.

  • - તત્વ સંપૂર્ણપણે બ્રાઉઝર દ્વારા સપોર્ટેડ છે;
  • - તત્વ બ્રાઉઝર દ્વારા જોવામાં આવતું નથી અને તેને અવગણવામાં આવે છે;
  • - ઓપરેશન દરમિયાન, વિવિધ ભૂલો દેખાઈ શકે છે, અથવા તત્વ રિઝર્વેશન સાથે સપોર્ટેડ છે.

નંબર બ્રાઉઝર વર્ઝન સૂચવે છે કે જેમાંથી તત્વ સપોર્ટેડ છે.

આ લેખ PHP _SELF ચલનો ઉપયોગ કરવા વિશે વિગતવાર છે.

PHP _SELF ચલ શું છે?

PHP _SELF ચલ વર્તમાન ફાઇલનું નામ અને પાથ પરત કરે છે (દસ્તાવેજ રુટને સંબંધિત). તમે ફોર્મના એક્શન એટ્રિબ્યુટમાં આ ચલનો ઉપયોગ કરી શકો છો. કેટલીક ઘોંઘાટ પણ છે જે તમારે જાણવી જોઈએ. અલબત્ત, અમે આ ઘોંઘાટને અવગણી શકતા નથી.

ચાલો થોડા ઉદાહરણો જોઈએ.

ઇકો $_SERVER["PHP_SELF"];

1) ચાલો ધારીએ કે તમારી php ફાઇલ નીચેના સરનામે સ્થિત છે:

Http://www.yourserver.com/form-action.php

આ કિસ્સામાં, PHP _SELF વેરીએબલમાં આ શામેલ હશે:

"/form-action.php"

2) ચાલો ધારીએ કે તમારી php ફાઇલ આ સરનામે સ્થિત છે:

Http://www.yourserver.com/dir1/form-action.php

PHP_SELF હશે:

"/dir1/form-action.php"

ફોર્મની ક્રિયા વિશેષતામાં PHP _SELF. તેણીની ત્યાં શા માટે જરૂર હતી?

સામાન્ય રીતે PHP _SELF ચલનો ઉપયોગ થાય છે ક્રિયા વિશેષતાફોર્મ ટેગ. ક્રિયા વિશેષતા એ સરનામું સ્પષ્ટ કરે છે કે જેના પર ફોર્મની સામગ્રી પુષ્ટિ પછી મોકલવામાં આવશે (વપરાશકર્તા type="submit" સાથે બટન પર ક્લિક કરે છે). એક નિયમ તરીકે, આ તે જ પૃષ્ઠ છે જ્યાંથી ફોર્મ બાકી છે.

જો કે, જો તમે ફોર્મ દ્વારા સંદર્ભિત ફાઇલનું નામ બદલો છો, તો તમારે એક્શન એટ્રિબ્યુટમાં ફાઇલનું નામ બદલવાની જરૂર પડશે, અન્યથા ફોર્મ કામ કરશે નહીં.

PHP _SELF ચલ તમને બિનજરૂરી સુધારાઓથી બચાવશે, કારણ કે ફાઇલના નામના આધારે પૃષ્ઠ સરનામું આપમેળે જનરેટ થશે.

ધારો કે તમારી પાસે form-action.php નામની ફોર્મ ફાઇલ છે અને તમે ઇચ્છો છો કે તે જ ફાઇલમાં કન્ફર્મેશન પછી ફોર્મ સબમિટ કરવામાં આવે. સામાન્ય રીતે તેઓ આના જેવું લખે છે:

પરંતુ તમે form-action.php ને બદલે PHP _SELF વેરીએબલનો ઉપયોગ કરી શકો છો. આ કિસ્સામાં કોડ આના જેવો દેખાશે:



શું તમને લેખ ગમ્યો? તમારા મિત્રો સાથે શેર કરો!
પણ વાંચો